Python编程_Lesson013_函数编程总结和补遗

来源:互联网 发布:淘宝拒签后 退款 编辑:程序博客网 时间:2024/06/16 19:51

函数的注释

由于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 testtest()from  PoEdu.public import testtest()

我们from PoEdu.public import test两次,来导入PoEdu包中public.py文件中的test函数,打印结果如下:

init public.pypublic test()public test()

所以我们只能对public.py文件初始化一次。


id()函数

用法如下:

id(1)1385346112

它表示在int类型的对象1在Python中的ID号为1385346112,Python中每一个对象都有一个ID,但是这里的ID跟C/C++中的地址还是有区别的。
当然,Python为了效率,对一些常用的变量都做了一个固定的id,比如:

id(1)1385346112id(2)1385346144id("a")2488569372544id("a")2488569372544str = "a"str2 = "a"id(str)2488569372544

但是对于两个(包括两个)以上的字符变量就不会再是固定的了

id("aa")2488584917320id("aa")2488584918552

对于这一特性,我们稍微了解一下就好。


数值处理

abs()函数

取绝对值

bs(-1)1

str()函数

str(111)'111'str(123.123)'123.123'

float()函数

float("123.123")123.123

int()函数

int("123")123int(123.123)123

bool()函数

这是一个有意的函数,只有0才能转换为False,其余情况都转换为True

bool(1)Truebool(-1)Truebool(0)False

max()函数

max函数接收的参数是一个列表,但是需要注意的是,这个列表中的所有元素的类型必须一致,否则会报错。

max([1,2,3,4,-3,20,7])20max("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])55sum([1.2,2.3,3,4,5,6,7,8,9,10])55.5sum(["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)4pow(2,3)8

divmod()函数

参数是被除数和除数,返回值是商和余数

divmod(100, 3)(33, 1)divmod(200, 3)(66, 2)

len()函数

可以求任何可迭代对象中的元素个数。

len([1,2,3,0,5,3])6len("123445hdfhi")11

all()函数

会判断这个可迭代对象中所有元素的值是否为True,是的话返回True,否则返回False

all([1,2,3,4,0,3,4,5])Falseall([1,"2","4"])Trueall(["0", 1, 3])True

any()函数

只要这个可迭代对象中有一个元素为True,则返回True

any([1,2,3,4,5,0])Trueany([1,0,0,0,0,0])Trueany([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)1random.randint(1, 10)4random.randint(1, 10)5random.randint(1, 10)2random.randint(1, 10)6random.randint(1, 10)10

还有一个类似的方法来产生随机数,唯一区别是产生的随机数中不包含最后一个数:

random.randrange(1, 10)9random.randrange(1, 10)1random.randrange(1, 10)1random.randrange(1, 10)5random.randrange(1, 10)7random.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存入到文件或者从文件中读取的时候,看一下类型再做相应的数据处理会更好。