1、关于函数调用
(1)同一文件夹下互相调用:
www文件夹下的A.py和B.py文件,A中有add函数,B想调用A,直接用
from A import add
(2)不同文件夹下互相调用:
A.py中有add函数,B想调用A
- NNN/www文件夹下的A.py和NNN/hhh文件夹下的B.py
import sys
from sys import path
path.append(0,sys.path[0]+'\\www')
from .www.A import add
- A.py在文件NNN/www/test1/app文件夹下,B.py在文件NNN/hhh/test2/app文件夹下
import sys
sys.path.inset(0,'/path/to/NNN/www/test1/app')
import A
- 同(2)一样,但是必须要求被引用的文件夹下有__init__.py文件,如果没有,可以新建一下
from NNN.www.test1.app.A import add
- 若A.py和B.py在平行路径下,如 A.py在NNN/MMM/www/A.py B.py在NNN/MMM/hhh/B/py
import sys
sys.path.append('../')
- 此方法适用于python3 on linux------------没试验过
import sys
sys.path.append(pathto(A.py所在的文件夹)ContainingScripts)
from scriptName import add
2、调用函数总结
(1)想查看自己的时候,不要用执行,否则不能调用某函数的其中一个方法,用以下方法:
if __name__ == '__main__':
print(函数名())
(2)命名最好不要用中文
(3)每个方法都应该有返回值
(4)不能写成固定的值或者输入值,应该参数化
3、Python中_init_.py文件的作用:
(1)作为package的标识,每个package都要有一个该文件
(2)可以用来精确导入,导入其他函数的方法时使用
(3)定义__all__用来模糊导入
4、函数未指定返回值,默认为None
def sum(a, b):
c = a + b
print(c)
z = sum(1,2)
print(z)
#输出结果:
3
None
5、作用域和声明的位置有关系,和调用位置没有任何关系
name = "alex"
def foo():
name="Banana"
def bar():
name="Apple"
print(name)
return bar
a = foo()
print(a)
a()
#输出结果:
<function foo.<locals>.bar at 0x000001D4CBD20E58>
Apple
6、文件规范写法
为了一个文件更加规范,也为了其他文件互相调用方便,每个文件内只写功能,测试内容另写一个,如下
def a():
pass
def b():
pass
if __name__=="__main__":
print("test")
7、python中的颜色
s="I am \033[46;1m lalala \033[0m age 18"
print(s)
#输出结果:
I am lalala age 18 #alex是有颜色的
说明:
- \033[46;1m 放在哪,决定了颜色的起始位置
- \033[0m 放在哪,决定了结束位置
- \33[4m 是给相应字体加下划线
- 46是控制字体背景的颜色
字背景颜色范围:
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色 - 字颜色范围:
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色 - 黑底彩色字颜色范围
90:黑
91:深红
92:绿
93:黄色
94:蓝色
95:紫色
96:深绿
97:白色
8、is和==的区别
is是对象的标示意符,用来表示两个对象的内存空间是不是一样的,是否用同一块空间地址,而==是比较两个对象的内容是否相等
9、niubility函数
将两个列表打包成字典的形式——dict(zip(name,age))
10、简洁代码(列表推导式)
L = []
for x in range(1, 11):
L.append(x * x)
print(L)
精简写法:
[x * x for x in range(1, 11)]
还可以直接加if判断,但是不能加else
[x * x for x in range(1, 11) if x % 2 == 0]
有一种可以加else的写法:
[x if x % 2 == 0 else -x for x in range(1, 11)]
#输出结果:
[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
注意: 在一个列表生成式中,for前面的if … else是表达式,而for后面的if是过滤条件,不能带else
vec1 = [2, 4, 6]
vec2 = [4, 3, -9]
[x*y for x in vec1 for y in vec2]
输出结果:[8, 6, -18, 16, 12, -36, 24, 18, -54]
[x+y for x in vec1 for y in vec2]
输出结果:[6, 5, -7, 8, 7, -5, 10, 9, -3]
[vec1[i]*vec2[i] for i in range(len(vec1))]
输出结果:[8, 12, -54]
嵌套列表操作:
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
[[row[i] for row in matrix] for i in range(4)]
输出结果:[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]