Linux系统-部署-运维系列导航

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
函数定义与调用时,参数传递分为以下类型
  1. 位置参数,只能按照参数定义的顺序传递
  2. 关键字参数,按照 参数名称=参数值 方式,不区分参数定义的顺序
  3. 默认参数,函数定义时指定参数的默认值,但默认参数必须在参数列表最后面,但需要在 不定长参数 之前
  4. 不定长参数,或包裹参数,或包装参数,将调用时多个值合并为一个值,只能定义在参数列表最后面
    1. 包裹元组参数,定义为参数名前加一个星号,如上tuplearg,只能定义一次,且需要在包裹字典参数之前,调用时将多个值(没有明确参数名的)合并为元组使用
    2. 包裹字典参数,定义为参数名前加两个星号,如上dictarg,只能定义一次,且需要在包裹元组参数之后,调用时将多个键值对(没有明确参数名的)合并为字典使用
特别关注
  1. 参数列表中“/”符号,表示之前的参数为位置参数
  2. 参数列表中“*”符号,表示之后的参数为关键字参数,一般为有默认值的参数
  3. “*”符号与 不定长参数 同时定义时,只能在最后面定义包裹字典参数 **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

  1. 包=文件夹,模块=文件,对象=类、方法、模块内对象
  2. import只能导入包、模块,from import可以导入包、模块、对象
  3. 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)

 

 

posted on 2023-09-01 13:59  xiaoyaozhe  阅读(23)  评论(0编辑  收藏  举报