python查漏补缺
理论上的东西
-
脚本语言一般都是不需要编译的,是解释型语言。python则__需要编译__:会将脚本语言编译成字节码的形式。
-
Jython:用Java编写的Python,可以使用Java中的链接库。CPython是现在用的Python。
-
Python for .Net:.Net使用的是XML Web Services。 Python for .Net和IronPython是.net平台上的python。
vim和Emacs(不学习)
注释与断行
大段注释 ‘’’ 或者 “”“ 包裹内容。(三个单引号或者三个双引号)
同一句中可以用;来将语句分割。
字符串
‘’‘(三引号)可以包括大段字符串。
-
str.isalnum() 0-9 a-z A-Z
-
str.find() 找到起始位置
-
切片[a,b] 不包含b
-
原始字符串 r or R开头,转义字符不再起作用。
列表和元组
- list.extend(L) 把L追加在list上
- list.index() 找元素的下标
- list.reverse() 翻转链表
- 元组:用()创建,一旦创建,数据类型就不可改变。
- 列表:[], 字典{}
函数参数
- 常规用法
def count(x=5):
return x ** 3
def count(x=None, y=None, z=None):
if(x == None):
x = 1
if(y == None):
y = 2
if(z == None):
z = 5
return x * y * z
这样调用函数 count( , ,7)时不会报错,否则是会报错的。
还可以按参数名传递参数
count(y=3,z=5,x=1)
不必按照顺序
count(x=5,y=5,1)
是错误的
如果按照参数传递,可以不写判断语句,写判断语句更符合规范。
- 传递任意数量的参数:在参数名前加一个星号,表示可变参数:
def myListAppend(*list):
l = []
for i in list:
l.extend(i)
return l
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
myListAppend(a,b)
- 用函数改变参数的值:精髓在于用列表传值。不需要像c语言一样用指针。
def fakeChangeNum(x):
x = x * 2
def realChangeNum(x[0]):
x[0] = x[0] * 2
第二种会改变真实参数值
- 变量的作用域
内置作用域(python预先定制)、全局作用域、局部作用域。
全局作用域:加global
global a
没有块作用域。
块作用域是C\C++\JAVA中有的
int a = 0;
for (int i = 0;i < 10;i++)
{
int b = i;
b++;
a += b;
}
其中b的作用域就是块作用域
使用Lambda表达式定义函数
lambda来源于LISP语言,可以用于定义匿名函数。
lambda 参数列表:表达式
>>> fun = lambda x: x * x - x
>>> fun(3)
6
>>> fun
<function <lambda> at 0x01000000>
Lambda仅能含有单一表达式,不能包含其他语句。可以调用别的函数。
!! 不可以在里面使用print
语句和其他语句(if之类的)
- 三目运算符的写法
x = int(input("输入第一个数:"))
y = int(input("输入第二个数:"))
z = int(input("输入第三个数:"))
#三目运算符的第一种写法
print((x if (x>y) else y) if ((x if (x>y) else y)>z) else z)
#三目运算符的第二种写法
a=(x if (x>y) else y)
print(a if (a>z) else z)
模块
- 导入方式
import导入是导入的整个模块,from导入是导入了模块中的某个函数。
from xxx import *
导入xxx中的所有函数,调用比较方便
可以直接用名字
- python查找模块
先从当前目录找,找不到会从sys中的path找。可以添加路径
- 是否需要编译模块
对于模块,python总会在第一次调用后就将其编译成字节码的形式,以提高脚本的运行速度。
__ pycache __ 文件夹中有一个mymodule.cpython-36.pyc文件。 是将mymodule文件编译成字节码的文件。
导入模块时会查找模块的字节码文件,如果存在,则将编译后的模块的修改时间同模块的修改时间比较。如果不相同,会重新编译模块。
对于非模块的脚本,Python不会在运行脚本后将其编译成字节码的形式。可以使用py_compile
#file:compile.py
import py_compile
py_compile.compile('usermodule.py', "usermodule.pyc")
可以使用-O和-OO进行优化,-OO易出问题,但是优化的较多。
python -O compile.py
python -OO compile.py
- 模块独立运行
python通过对__ name __属性值的判断,可以让脚本在导入和独立运行时都可以正常运行。
if __name__ == '__main__':
***
- 获得模块方法名
dir(sys) #sys是模块名
dir() #默认所有
- 用包管理模块
包可以看作处于同一目录中的模块,组成如下
断,可以让脚本在导入和独立运行时都可以正常运行。
if __name__ == '__main__':
***
- 获得模块方法名
dir(sys) #sys是模块名
dir() #默认所有
- 用包管理模块
包可以看作处于同一目录中的模块,组成如下
[外链图片转存中…(img-nvxfxifw-1598776680575)]
__init__
主要作用是设置__all__
变量。