Python中常见的括号(),[],{}的区别:
Python中的这三种数据类型有不同的作用,分别代表不同的Python基本内置数据类型。
1 () tuple元组数据类型
元组是一种不可变序列,
1 | >>> tup = (1,2,3) |
2 []列表数据类型
列表是一种可变序列,
1 | >>> list('Python') |
3 {}字典数据类型
字典是Python中唯一内建的映射类型
1 | >>> dic = {'jon':'boy','lili':'girl'} |
Python下载第三方模块,下载速度慢,如何换源
‘’’
mkdir ~/.pip
vim ~/.pip/pip.conf
‘’’
‘’’
[global]
index-url = http://pypi.douban.com/simple
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com
‘’’
不变数据类型和可变数据类型
可变数据类型:value值改变,id值不变;
不变数据类型:value值改变,id值也改变。
分辨方式:在改变value值的同时,使用id()函数来查看变量id值是否发生变化。
不变 整型 浮点型 字符串 元组
可变 列表 字典
不变和可变数据类型对运算结果的影响:
不变
1 | a = 1 |
Ans
1 | 1 |
可变
1 | a = {'name':'jack'} |
Ans
1 | {'name':'jack','age':27} |
简而言之,对于不可变数据类型,当多个名称包含的内容都是相同的,当改变一个之后,其他的不变,改变的指向另外的地址。
对于可变的数据类型,当多个内容相同,改变一个之后,所有指向的地址不变,但是内容改变了。
打包可执行文件
通过pyinstaller将python程序打包为可执行文件。
pyinstaller,distribute分别是打包所需要的通过pip3来安装
1 | pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple distribute |
注意,有时候会遇到问题,当执行打包好的文件时,
1 | no module named 'pkg_resources.py2_warn' |
还有一个解决方法记录一下:
1.先用pyinstaller -D(F) xxx.py生成一下(不一定能正常运行)
2.(关键)经过第一步之后,目录下有个.spec文件,用记事本打开,里面有个hiddenimports,在这条里面加上pkg_resources.py2_warn
1 | hiddenimports=['pkg_resources.py2_warm'] |
3.再次用pyinstaller,注意这时候输入的命令是pyinstaller -D(F) xxx.spec
4.经过步骤2就可以解决这个问题,若仍然提示no module named XXXXX ,则再次写入到hiddenimports
5.需要经过几次调试,建议先用-D处理没问题之后再-F。
Python中关键词
name
name__是python的一个内置类属性,它存储模块的名称。
python的模块既可以被调用,也可以独立运行。而被调用时__name__存储的是py文件名(模块名称),独立运行时存储的是”__main“。
那么它的作用主要就是用来区分,当前模块是独立运行还是被调用。
具体应用
当我们建立一个模块的时候,我们会在该模块最后输出调试信息,进行调试,调试之后,会在其他地方导入这个模块,但是,我们在调用这个模块的时候不希望产生调试信息,所以我们就需要区分这个模块是独立运行还是被调用,被调用的情况下就不输出调试信息。
例如:
1 | if __name__ == '__main__': |
file
查看模块的源文件路径,当指定模块或者包没有说明文档的时候,仅仅通过help()函数或者__doc__属性无法帮助理解该模块的具体功能,我们通过__file__查找模块的具体位置,直接查看源代码。
1 | import string |
注意,不是所有的模块都提供__file__属性,因为并不是所有的模块的实现都是采用的python语言,有的模块是使用的其他编程语言,例如c语言
子模块导入子模块中import
当我们使用一个子模块的时候,子模块会调用其他子模块,这时候,使用下面的方法:
1 | from .xxx import xxx |
但是,在检测子模块的子模块的时候,上面的方法会报错,就可以直接使用:
1 | from xxx import xxx |