pip源初始化
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn
VSCode插件安装
- 语法检查 flake8
- 代码格式化 yapf
- 文件及文件夹图标 vscode-icons
- 自动补全,如函数、类、方法 python-snippets
用户配置
#launch.json 启动配置,F5直接运行 "stopOnEntry": false #settings.json 用户配置,启用插件,保存自动代码检查和格式化
{
"terminal.integrated.sendKeybindingsToShell": true,
"window.zoomLevel": 1, //窗口缩放,单位20%
"python.formatting.provider": "yapf",
"python.linting.flake8Enabled": true,
"python.linting.lintOnSave": true, //保存自动语法检查
"editor.formatOnSave": true, //保存自动格式化
"workbench.colorTheme": "Quiet Light",
"python.linting.flake8Args": [
"--max-line-length=256"
],
"explorer.confirmDelete": false,
"[python]": {
"editor.formatOnType": true
},
"terminal.integrated.defaultProfile.windows": "Command Prompt", //默认终端设置为cmd,默认为powershell,有些命令不兼容
"editor.mouseWheelZoom": true, //鼠标滚轮缩放(代码)
"python.analysis.completeFunctionParens": true //自动补全括号
}
函数,参数,调用
#此为代码规范示例代码,实际使用中有些参数无法同时使用 def func(arg1, agr2, /, arg3, arg4, *, arg5, arg6, arg7=0, *tuplearg, **dictarg): pass
函数定义与调用时,参数传递分为以下类型
- 位置参数,只能按照参数定义的顺序传递
- 关键字参数,按照 参数名称=参数值 方式,不区分参数定义的顺序
- 默认参数,函数定义时指定参数的默认值,但默认参数必须在参数列表最后面,但需要在 不定长参数 之前
- 不定长参数,或包裹参数,或包装参数,将调用时多个值合并为一个值,只能定义在参数列表最后面
- 包裹元组参数,定义为参数名前加一个星号,如上tuplearg,只能定义一次,且需要在包裹字典参数之前,调用时将多个值(没有明确参数名的)合并为元组使用
- 包裹字典参数,定义为参数名前加两个星号,如上dictarg,只能定义一次,且需要在包裹元组参数之后,调用时将多个键值对(没有明确参数名的)合并为字典使用
特别关注
- 参数列表中“/”符号,表示之前的参数为位置参数
- 参数列表中“*”符号,表示之后的参数为关键字参数,一般为有默认值的参数
- “*”符号与 不定长参数 同时定义时,只能在最后面定义包裹字典参数 **dictarg
如上定义,各参数特性如下
- arg1、arg2只能通过位置传递
- arg3,arg4可以通过位置 或 关键字传递
- arg5,arg6,arg7只能通过关键字传递,其中arg7有默认值,可以不传递
- 其他非键值对形式的参数,统一合并到元组 tuplearg 中
- 其他键值对形式的参数,统一合并到字典 dictarg 中
dict 字典定义方式
以下面字典内容为例
{ "a":1, "b":2 }
1.直接变量赋值
dict1={ "a":1, "b":2}
2.dict构造函数传递键值对赋值
#class dict(**kwarg) dict2=dict(a=1,b=2)
3.dict构造函数传递键值对(元组)列表
#class dict(iterable, **kwarg) dict3=dict([("a",1), ("b",2)])
4.dict构造函数传递映射
#class dict(mapping, **kwarg) dict4=dict(zip(["a","b"], [1,2]))
import 与 from import
- 包=文件夹,模块=文件,对象=类、方法、模块内对象
- import只能导入包、模块,from import可以导入包、模块、对象
- import执行多次也只会导入一次,导入后使用的是原来模块内的模块内对象,不会与当前模块的对象重名覆盖,from import执行多次会重新导入,导入后会在当前模块定义新的对象,指向原来模块的模块内对象,且与当前模块对象会相互覆盖
open(filename, mode)
mode模式
变量与作用域
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 的作用域一共有4种,分别是:
有四种作用域:
- L(Local):最内层,包含局部变量,比如一个函数/方法内部。
- E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
- G(Global):当前脚本的最外层,比如当前模块的全局变量。
- B(Built-in): 包含了内建的变量/关键字等,最后被搜索。
规则顺序: L –> E –> G –> B。
在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到 global 和 nonlocal 关键字了。
注意:global与nonlocal声明,需要单独一行,不能与赋值语句同时执行,即不能 global object=value
1.global,函数内部要修改全局变量,在函数内部首先执行 global object
num = 1 def fun1(): global num # 需要使用 global 关键字声明 print(num) num = 123
2.nonlocal,函数内部想修改嵌套的外层函数变量,在函数内部首先执行 nonlocal object
def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) inner() print(num)