函数的注释
由于Python是一门解释性语言,它的注释并不会被去掉,所以当我们使用help查看这个函数功能的时候,就会显示这个函数的注释部分:
我们自定义一个函数
def foo(x, y):
'''
函数功能
:param x: 参数
:param y: 参数
:return: 返回值
'''
pass
调用print(help(foo))
就会打印出下面的注释:
Help on function foo in module __main__:
foo(x, y)
函数功能
:param x: 参数
:param y: 参数
:return: 返回值
None
这样就会把我们自定义函数的注释通过help函数打印出来。
当然help也可以查看系统内置函数中的函数注释。
dir()和vars()函数
使用
print(dir())
print(vars())
打印结果如下:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'foo', 'main']
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001562970B0B8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/Administrator/Desktop/PoEdu/Python/SourceCode/PoEduShopDemo/Test.py', '__cached__': None, 'foo': <function foo at 0x0000015629613E18>, 'main': <function main at 0x00000156297DF730>}
Help on function foo in module __main__:
从结果可以看出,dir()函数返回的是当前程序中所有的变量的键名,而vars()返回的 当前程序所有的变量字典。
模块导入
我们使用普通的import方法进行模块导入的时候,即使我们调用多次import XXX.xxx函数,但是它只能初始化这个XXX文件一次,不会初始化多次,我们看一个例子:
from PoEdu.public import test
test()
from PoEdu.public import test
test()
我们from PoEdu.public import test两次,来导入PoEdu包中public.py文件中的test函数,打印结果如下:
init public.py
public test()
public test()
所以我们只能对public.py文件初始化一次。
id()函数
用法如下:
id(1)
1385346112
它表示在int类型的对象1在Python中的ID号为1385346112,Python中每一个对象都有一个ID,但是这里的ID跟C/C++中的地址还是有区别的。
当然,Python为了效率,对一些常用的变量都做了一个固定的id,比如:
id(1)
1385346112
id(2)
1385346144
id("a")
2488569372544
id("a")
2488569372544
str = "a"
str2 = "a"
id(str)
2488569372544
但是对于两个(包括两个)以上的字符变量就不会再是固定的了
id("aa")
2488584917320
id("aa")
2488584918552
对于这一特性,我们稍微了解一下就好。
数值处理
abs()函数
取绝对值
bs(-1)
1
str()函数
str(111)
'111'
str(123.123)
'123.123'
float()函数
float("123.123")
123.123
int()函数
int("123")
123
int(123.123)
123
bool()函数
这是一个有意的函数,只有0才能转换为False,其余情况都转换为True
bool(1)
True
bool(-1)
True
bool(0)
False
max()函数
max函数接收的参数是一个列表,但是需要注意的是,这个列表中的所有元素的类型必须一致,否则会报错。
max([1,2,3,4,-3,20,7])
20
max("a", "bc", "sr")
'sr'
max(1, "2", "3", 9)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'
从结果可以看出,当类型不一样的时候就会报错。
min()函数
与max()函数一样。
sum()函数
只能加数值,不能加字符串
sum([1,2,3,4,5,6,7,8,9,10])
55
sum([1.2,2.3,3,4,5,6,7,8,9,10])
55.5
sum(["1", "2"])
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
pow()函数
幂运算函数
pow(2,2)
4
pow(2,3)
8
divmod()函数
参数是被除数和除数,返回值是商和余数
divmod(100, 3)
(33, 1)
divmod(200, 3)
(66, 2)
len()函数
可以求任何可迭代对象中的元素个数。
len([1,2,3,0,5,3])
6
len("123445hdfhi")
11
all()函数
会判断这个可迭代对象中所有元素的值是否为True,是的话返回True,否则返回False
all([1,2,3,4,0,3,4,5])
False
all([1,"2","4"])
True
all(["0", 1, 3])
True
any()函数
只要这个可迭代对象中有一个元素为True,则返回True
any([1,2,3,4,5,0])
True
any([1,0,0,0,0,0])
True
any([0,0,0,0,0,0])
zip()函数
x = list(range(1,4))
x
[1, 2, 3]
y = list(range(4,7))
y
[4, 5, 6]
z = list(range(7, 10))
z
[7, 8, 9]
w = zip(x, y, z)
for i in w:
print(i)
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)
chr()函数
根据编码取字符
chr(123)
'{'
ord()函数
根据字符取编码
ord("{")
123
hex()函数
从十进制到十六进制的转换
hex(100)
'0x64'
oct()函数
从十进制到八进制的转换
oct(100)
'0o144'
bin()函数
从十进制到二进制的转换
> bin(100)
'0b1100100'
str()函数的特殊用法
灵活占位
s = "{0} Say: {1}"
s
'{0} Say: {1}'
fs = s.format("Mark", "Hello")
fs
'Mark Say: Hello'
这个字符串的特性可以用在反射机制(工厂模式)中,来进行模块的导入。
模块的使用
使用 import modulename来导入某一个模块
random模块
随机数的产生模块
random.random()会产生一个0到1之间的double类型的随机数
random.random()
0.3671209897112814
random.randint(1, 10)会生成一个1到10之间的整数,包括1和10
random.randint(1, 10)
1
random.randint(1, 10)
4
random.randint(1, 10)
5
random.randint(1, 10)
2
random.randint(1, 10)
6
random.randint(1, 10)
10
还有一个类似的方法来产生随机数,唯一区别是产生的随机数中不包含最后一个数:
random.randrange(1, 10)
9
random.randrange(1, 10)
1
random.randrange(1, 10)
1
random.randrange(1, 10)
5
random.randrange(1, 10)
7
random.randrange(1, 10)
4
文件操作的相关模块
在Python中常用的关于文件的模块有三个,分别是pickle、json和shelve,它们都可以简单的实现文件的读写操作。
序列化和反序列化
参考地址
把内存中的数据存到硬盘就叫做序列化。
把硬盘中的数据导入到内存中叫做反序列化。
这里我们只简单的说一下pickle和json这两个模块。
json存储在硬盘上面使用的是明文的方式,而pickle使用的则是二进制。它们都有load()、loads()、.dump()、dumps()这四个函数。
json模块中的函数
load()反序列化:读取文件中的json字符串并转换成Python对象
loads()反序列化:将json字符串转换成Python对象
dump()序列化:将Python对象转换成json字符串并存储到文件中
dumps()序列化:将Python对象转换成json字符串
pickle模块中的函数
load()反序列化到内存
loads()反序列化到内存
dump()序列化到硬盘
dumps()序列化硬盘
需要注意的是,json或者pickle存入到文件或者从文件中读取的时候,看一下类型再做相应的数据处理会更好。