>获取端口命令(控制台cmd)
python -m pydoc -p 0
例:生成结果:
Server ready at http://localhost:51363/
Server commands: [b]rowser, [q]uit
>lib:python 保存官方文档的文件夹
>site-packages:python 第三方库文件夹
>斐波那契数列
def fib(n): # 可执行语句(冒号标志函数体的开始)
"""
函数功能:求斐波那契数列
:param n: 生成的斐波那契数列长度
:return: 返回生成的斐波那契数列
"""
l1 = []
a, b = 1, 1
for i in range(n):
l1.append(a)
a, b = b, a + b # 这个要求a,b同时赋值,不能分开进行
return l1 # 返回生成的斐波那契数列(return可返回多个值,作为一个元组,若无返回值则输出None)
x = eval(input("请输入需要几个元素:"))
y = fib(x)
print(y)
>混合传参顺序 1.位置参数 2.关键字参数:对应实参 3,默认值参数:针对形参 4.不定长参数(打包):*参数名(元组) 5.不定长参数(打包):**参数名(字典)
若后两个不定长参数不传参,则自动生成元组/字典。
>解包
def add(a, b, c, d):
print(a, b, c, d)
add(*(1, 2, 3, 4))
add(**{"a": 11, "b": 22, "c": 33, "d": 44})
"""
输出结果:
1 2 3 4
11 22 33 44
"""
>LEGB原则(从强到弱)
- L:本地作用域/局部
- E:函数嵌套作用域
- G:文件/全局
- B:内置作用域
-
使用import语句可以一次导入多个模块,各模块之间用逗号(注意必须是英文逗号)分开。
-
程序设计方法主要分为面向过程(结构化)程序设计方法和面向对象程序设计方法。
结构化程序设计方法的特点,就是将复杂任务分解为简单的子任务,通过“化繁为简”的方式逐个子问题解决,最后把各子问题的解按一定方式综合到一起就形成了整个复杂问题的解。
面向对象程序设计方法是把系统中的任何事物都看作是对象,通过对象之间的交互完成系统的运行。
-
当调用一个模块时,同时也会执行被调用模块当中的输出语句,且按照被调用模块->调用语句的顺序执行。(解决方案:在被调用的模块代码中加入一个if判断,if __name__=="__main__":则进行输出执行语句)。
-
每个模块中都有的一个全部变量__name__,__name__的作用是获取当前模块的名称,如果当前模块是单独执行的,则其__name__的值就是__main__;否则,如果是作为模块导入,则其__name__的值就是模块的名字。
-
提示:如果要导入一个模块中的所有标识符,也可以使用“from模块名import *”的方式。
如果一个模块定义了列表__all__,则from模块名import*语句只能导入__all__列表中存在的标识符。(__all__==['xxx']) -
import random as ra(起别名)from random import randint as ra(from xx import * 导入该包中所有模块)
-
Python中的包(Package)的作用与操作系统中文件夹的作用相似,利用包可以将多个关系密切的模块组成在一起,一方面方便进行各脚本文件的管理,另一方面可以有效避免模块命名冲突问题。定义一个包,就是创建一个文件夹并在该文件夹下创建一个__init__.py文件,文件夹的名字就是包名。另外,可以根据需要在该文件夹下再创建子文件夹,子文件夹中创建一个__init__.py文件,则又形成了一个子包。模块(xx.py文件)可以放在任何一个包或子包中,在导入模块时需要指定所在的包和子包的名字。例如,如果要导入包A中的模块B,则需要使用“import A.B”。(from 包名.子包名.模块名 import 函数名)
-
__init__.py (脚本文件)可以是一个空文件但是不能没有,也可以包含包的初始化代码或者设置__all__(指定from x import * 中的*包含列表)列表(包目录下必须有一个__init__.py文件,只有有这个文件才能被叫做包,若不存在则不能被称为包)。
-
猴子补丁(函数赋值)
-
python模块的搜索路径:当前工作目录——>build_in(内置路径)——>sys.path(指定路径)
-
导包路径:
-
import x(把整个对应的模块对象(房间)赋值给x这个名字,使用方法:x.函数/变量名)
-
from x import * (把该模块门打开了,用谁直接用就行【有风险:函数重名则就近调用】,使用方法:函数/变量名【直接使用】)
-
-
没有“.”都是模块,有则是包下面的模块
-
重新导包(更新):
-
from importlib import reload
-
>变量作用域
- 全局变量(global):在所有函数中都可以使用,global关键字用来声明操作的是全局变量(将局部变量强制转换为全局变量)
- nonlocal:在函数嵌套中,使用该关键字,可以使内层函数直接使用外层函数中定义的变量。(将嵌套内层变量和外层变量变成一个)
- lambda[参数1[,参数2,...,参数n]]:表达式(lambda x: x**3)简单函数的使用
- 闭包
- 如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了闭包。
- 定义在外层函数中但由内层函数使用的变量被称为自由变量。
- 般情况下,如果一个函数结束,那么该函数中定义的局部变量就都会释放。闭包是一种特殊情况,外层函数在结束时会发现其定义的局部变量将来会在内层函数中用,此时外层函数就会把这些自由变量绑定到内层函数。
- 所谓闭包,实际上就是将内层函数的代码以及自由变量(外层函数定义、但会由内层函数使用)打包在一起。
- 装饰器
- 利用装饰器,可以在不修改已有函数的情况下向已有函数中注入代码,使其具备新的功能。
- 一个装饰器可以为多个函数注入代码,一个函数也可注入多个装饰器的代码。
- 利用装饰器可以将日志处理、执行时间计算等较为通用的代码注入到不同的函数中,从而使得代码更加简洁。