Python 复习及常用模块和方法
本文的Python知识基于 Python3
Python的一些函数
help()
Python所独有的方法
- 一般用来显示方法的帮助
可以显示我们自己写在函数下的注释信息
- 这个注释也会被开发工具进行识别

>>> def Foo(x, y):
... '''
... 这是一个演示函数
... :param x: 参数1
... :param y: 参数2
... :return: 没有返回值
... '''
... pass
...
>>> help(Foo)
Help on function Foo in module __main__:
Foo(x, y)
这是一个演示函数
:param x: 参数1
:param y: 参数2
:return: 没有返回值
>>> dir()
- 查看当前程序中所有的系统变量
>>> dir()
['Foo', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> 注意: Foo是因为我上边执行def定义了Foo方法
vars()
- 查看系统变量的值
>>> vars()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x031EB3D0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'G:\\Lesson008\\Lesson008.py', '__cached__': None, 'Foo': <function Foo at 0x031AC6F0>}
>>> 实现import导入一次执行一次的需求
只能在Python2里使用
# HadesPkg.hadesInit.py
print("HadesPkg.hadesInit.Init.....")
# main.py
import HadesPkg.hadesInit
print("OK...")
import HadesPkg.hadesInit
print("OK...")
reload(HadesPkg.hadesInit)id()
- 返回对象的id
- 当对象的值改变了, id就会变(涉及到了深浅拷贝问题)
Python对常用的对象进行了优化
- 比如1,2,3...,a,b,c..., 它们的id都是固定的
>>> id(1)
492717712
>>> str = 'aaa'
>>> id(str)
90503616
>>> str = 'bbb'
>>> id(str)
89661504
>>> str = 'a'
>>> str1 = 'a'
>>> str2 = 'a'
>>> id(str)
86055008
>>> id(str1)
86055008
>>> id(str2)
86055008
>>>
>>> 不推荐使用id
一些数值函数
- abs 取绝对值
- int 转换为整数
- str 转换为字符串
bool 转换为bool值
- 0 转换为 Flase
- 其他非0转换为 True
max 求最大值
- 它的参数是 list
>>> max([1,2,3,4,6,78,45,634])
634
>>> max([123, 456, '123', '12'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'
>>> max(123, 'a', 23)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'
>>> max(['123', '456', '124'])
'456'
>>> min 求最小值
- 同max用法
sum 求和
- 只能加
int - 因为它有个默认开始值是0
- 在返回的时候, 会用 0 + ... + ...
- 这可以看做参数只限制为int的一种编程技巧
- 只能加
- pow 算次方
divmod 计算商和余数
- divmod(100, 3) 返回 (33, 1)
- len 求长度
all 是否都为true
- 参数可以传递一个
生成器, 或者延迟加载的东西
- 参数可以传递一个
any 是否有任意一个为true
- 同all
>>> all([1,2,3,4,5])
True
>>> all([0,2,3,4,5])
False
>>> any([1,2,3,4,5])
True
>>> any([0,2,3,4,5])
True
>>> any([0,0,0,0,0])
False
>>> zip 合并
- 行转列的合并, 矩阵转置
- 按照
最短的list来进行取值
>>> x = list(range(1,4))
>>> y = list(range(4,7))
>>> z = list(range(7,10))
>>> ret = zip(x, y, z)
>>> for v in ret:
... print(v)
...
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)
>>>
>>> x = list(range(1,5))
>>> y = list(range(4,10))
>>> z = list(range(7,20))
>>> ret = zip(x, y, z)
>>> for v in ret:
... print(v)
...
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)
(4, 7, 10)
>>> - chr 取某个"字符"的ASCII
- ord 根据ASCII取"字符"
- hex 16进制转换
- oct 8进制转换
- bin 2进制转换
{0} {1} {2} ...
- 字符串的
灵活占位
- 字符串的
>>> s = '{0} Said: {1}'
>>> s
'{0} Said: {1}'
>>> sz_fmt = s.format('I', 'You are best!')
>>> sz_fmt
'I Said: You are best!'
>>> sz_fmt = s.format('You', 'Yes')
>>> sz_fmt
'You Said: Yes'
>>>
>>> # 反射机制, 用于实现工厂模式
... m_server = '{0}'
...
>>> # 可以检测模块还行不行 从而换模块
... sz_m = m_server.format('os')
...
>>> m = __import__(sz_m)
>>> print(type(m))
<class 'module'>
>>> print(dir(m))
['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']
>>> hasattr(m, '__name__')
True
>>> hasattr(m, 'hades')
False
>>> m.getpid()
14372
>>> foo = getattr(m, 'getpid')
>>> foo()
14372
>>> random 随机数
- 需要导入 import random
>>> import random
>>> random.random()
0.6428583636507778
>>> print(random.randint(1, 10)) # 从1--10之间产生随机数
3
>>> print(random.randrange(1, 10)) # 不包括10
1
>>> 序列化
pickle序列化
- 需要导入 pickle
序列化的例子
# 序列化
>>> import pickle
>>> data = {'name':'Hades', 'sex':'man', 'age':18, 'BWH':[100, 30, 80]}
>>> s = pickle.dumps(data) # dumps的参数 可以接受任何我们使用的数据
>>> print(s)
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x05\x00\x00\x00Hadesq\x02X\x03\x00\x00\x00sexq\x03X\x03\x00\x00\x00manq\x04X\x03\x00\x00\x00ageq\x05K\x12X\x03\x00\x00\x00BWHq\x06]q\x07(KdK\x1eKPeu.'
>>> print(type(s))
<class 'bytes'>
>>> load_data = pickle.loads(s)
>>> print(load_data)
{'name': 'Hades', 'sex': 'man', 'age': 18, 'BWH': [100, 30, 80]}
>>> print(type(load_data))
<class 'dict'>
>>>
# 序列化到文件
>>> with open('data.lb', 'wb') as f_data: # 注意此处的 b, 需要使用二进制方式
... pickle.dump(data, f_data)
...
>>> with open('data.lb', 'rb') as f_data:
... load_data_b = pickle.load(f_data)
...
>>> print(load_data_b)
{'name': 'Hades', 'sex': 'man', 'age': 18, 'BWH': [100, 30, 80]}
>>> json序列化
- 需要导入jso
示例代码:
>>> import json
>>> data = {'name':'Hades', 'sex':'man', 'age':18, 'BWH':[100, 30, 80]}
>>> s = json.dumps(data)
>>> print(s)
{"name": "Hades", "sex": "man", "age": 18, "BWH": [100, 30, 80]}
>>> print(type(s))
<class 'str'>
>>> load_data = json.loads(s)
>>> print(load_data)
{'name': 'Hades', 'sex': 'man', 'age': 18, 'BWH': [100, 30, 80]}
>>> print(type(load_data))
<class 'dict'>
>>> 未完待续...
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-07-22 at 04:00 am