Python

数运算

x // y 两数相除取整数

x % y 两数相除取余数

abs(x) 取绝对值

int() 转换成整数

float() 转换成浮点数

divmod(x, y) 输出两数相除整数与余数

x ** yx的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修改funcAa的局部变量但不影响到全局:

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文件。

7371ns.jpg

网上的方法稍加变动,最后实现了:

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就可以了!

results matching ""

    No results matching ""