Python
数运算
x // y
两数相除取整数
x % y
两数相除取余数
abs(x)
取绝对值
int()
转换成整数
float()
转换成浮点数
divmod(x, y)
输出两数相除整数与余数
x ** y
x的y次方
pow(x, y)
x的y次方
pow(x, y, z)
将z与x的y方相除,输出余数
填充
x.center(weight, y)
填充空格或y(如果有的话,下同),字符串居中,有
x.ljust(weight, y)
左填充空格
x.rjust(weight, y)
右填充空格
x.zfill(weight)
左填充0
函数
global 语句
原始:
a = 100
def func():
a = 200
print("'a' in func" ,a)
测试一下:
>>> func()
'a' in func 200
>>> print(a)
100
可以看到,此时a
变量在func
函数内的值变为了200,但其全局变量值仍然为100。
那么,如何在函数内部修改一个变量的全局变量呢?
a = 100
def func():
global a
a = 200
print("'a' in func" ,a)
测试一下:
>>> print(a)
100
>>> func()
'a' in func 200
>>> print(a)
200
调用函数前,a
的全局变量为100,调用函数后,a
的全局变量被覆盖为200。
嵌套函数 与 nonlocal语句
a = 0
def funcA():
a = 100
def funcB():
a = 200
print("In funcB,a =", a)
funcB()
print("In funcA,a =", a)
run:
>>> funcA()
In funcB,a = 200
In funcA,a = 100
>>> print(a)
0
试图使用nonlocal
语句在funcB
修改funcA
中a
的局部变量但不影响到全局:
a = 0
def funcA():
a = 100
def funcB():
nonlocal a
a = 200
print("In funcB,a =", a)
funcB()
print("In funcA,a =", a)
run:
>>> funcA()
In funcB,a = 200
In funcA,a = 200
>>> print(a)
0
Python导入不同路径文件
最近写QQbot脚本的时候,遇到了一个问题:
需要在a.py文件中导入同目录下另一个文件夹plugins中的b.py文件。
网上的方法稍加变动,最后实现了:
a.py:
import sys
sys.path.append(sys.path[0] + "/plugins/")
import b
print(b.test())
b.py:
def test():
text = "hi"
return text
输出: hi
原理大概理解了:
先在终端里查看sys.path
:
>> print(sys.path)
>> ['/storage/emulated/0/1USER/termux/python', '/data/data/com.termux/files/usr/lib/python310.zip', '/data/data/com.termux/files/usr/lib/python3.10', '/data/data/com.termux/files/usr/lib/python3.10/lib-dynload', '/data/data/com.termux/files/usr/lib/python3.10/site-packages']
会发现默认的模块路径是一个列表,并且第一个就是我们所在的路径。
那么接下来想要导入不同路径的py文件,可以把它看做一个模块,再导入。
先在b.py所在路径创建一个__init__.py
文件,模块默认必须得有此文件,可以为空也可以初始化一些数据。
然后在a.py中使用append()
在sys.path
列表中添加b.py所在的路径/storage/emulated/0/1USER/termux/python/plugins/
,因为为了确保在不同设备运行,所以先获取运行的绝对路径sys.path[0]
,然后再在后面加上/plugins/
,所以就是:
sys.path.append(sys.path[0] + "/plugins/")
最后导入b.py就可以了!