“Python基础”的版本间的差异
跳到导航
跳到搜索
第481行: | 第481行: | ||
def target_function(arg1, arg2): | def target_function(arg1, arg2): | ||
pass # 原始函数的实现 | pass # 原始函数的实现 | ||
+ | |||
+ | |||
+ | 使用装饰器 | ||
+ | |||
+ | 装饰器通过 @ 符号应用在函数定义之前,例如: | ||
+ | |||
+ | @time_logger | ||
+ | def target_function(): | ||
+ | pass | ||
+ | |||
+ | 等同于: | ||
+ | |||
+ | def target_function(): | ||
+ | pass | ||
+ | target_function = time_logger(target_function) | ||
+ | |||
+ | 这会将 target_function 函数传递给 decorator 装饰器,并将返回的函数重新赋值给 target_function。从而,每次调用 target_function 时,实际上是调用了经过装饰器处理后的函数。 | ||
+ | |||
+ | 通过装饰器,开发者可以在保持代码整洁的同时,灵活且高效地扩展程序的功能 | ||
+ | |||
+ | |||
</pre> | </pre> | ||
[[category:devops]] [[category:python]] | [[category:devops]] [[category:python]] |
2024年5月4日 (六) 15:23的版本
目录
- 1 Python项目读取配置方式
- 2 python中字典的循环遍历的两种方式
- 3 python3 遍历列表list 四种方法
- 4 python文件操作
- 5 Python 函数返回值
- 6 range
- 7 learn
Python项目读取配置方式
常见的是 import configparser
python中字典的循环遍历的两种方式
1. 只对键的遍历 一个简单的for语句就能循环字典的所有键,就像处理序列一样: In [1]: d = {'name1' : 'pythontab', 'name2' : '.', 'name3' : 'com'} ...: for key in d: ...: print (key, ' value : ', d[key]) ...: name1 value : pythontab name2 value : . name3 value : com 2. 对键和值都进行遍历 如果只需要值,可以使用d.values,如果想获取所有的键则可以使用d.keys。 如果想获取键和值d.items方法会将键-值对作为元组返回,for循环的一大好处就是可以循环中使用序列解包。 代码实例: or key, value in d.items(): print (key, ' value : ', value) name1 value : pythontab name2 value : . name3 value : com
python3 遍历列表list 四种方法
python文件操作
python读取文件
Python 函数返回值
range
learn
py作为很多开发项目的辅助语言现在来说会更流行一些,不管是github还是其他地方。所以,你能找到的帮助,解决问题的思路也比perl广。 追问 python 自学容易么,可否推荐基本书看看 追答 首先我推荐你从这边开始入门,我以前也是这边看。http://woodpecker.org.cn/abyteofpython_cn/chinese/index.html, 自学容易的。 ,不需要急,等大部分了解后,并且使用py写脚本一段时间之后,你会开始需要更多模块的用法,这时候到 https://docs.python.org/2.7/ 这里查。 书的话,我觉得如果你想成为语法大师的话,O'REILLY 的 跟 这两本, 不会的问题,用google搜,特别是Stack Overflow 的站点上搜往往能找到答案。 当觉得已经对py很熟悉之后,可以看别人的py项目。然后用一些好用的框架比如django啥的,那么就合格了。然后模块就是越用越熟悉
Apr 2024
tuple 英 [tjʊpəl; ˈtʌpəl] 美 [ˈtjʊpəl; ˈtʌpəl] n. [计] 元组,重数
安装 VS Code Python
list
与Python字符串不一样的是,列表中的元素是可以改变的
def reverseWords(input): inputWords = input.split() inputWords=inputWords[-1::-1] output= ' '.join(inputWords) return output if __name__ == "__main__": input = 'I love evan' rw = reverseWords(input) print(rw) ''' evan love I # 翻转字符串 # 假设列表 list = [1,2,3,4], # list[0]=1, list[1]=2 ,而 -1 表示最后一个元素 list[-1]=4 ( 与 list[3]=4 一样) # inputWords[-1::-1] 有三个参数 # 第一个参数 -1 表示最后一个元素 # 第二个参数为空,表示移动到列表末尾 # 第三个参数为步长,-1 表示逆向 https://www.runoob.com/python3/python3-data-type.html '''
Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
元组中的元素类型也可以不相同
tup2 = (20,) # 一个元素,需要在元素后添加逗号 如果你想创建只有一个元素的元组,需要注意在元素后面添加一个逗号,以区分它是一个元组而不是一个普通的值,这是因为在没有逗号的情况下,Python会将括号解释为数学运算中的括号,而不是元组的表示。 如果不添加逗号,如下所示,它将被解释为一个普通的值而不是元组: not_a_tuple = (42)
修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
https://www.runoob.com/python3/python3-tuple.html
Dictionary
Python3 条件控制
match...case
Python 3.10 增加了 match...case 的条件判断,不需要再使用一连串的 if-else 来判断了
def http_error(status): match status: case 400: return "bad request" case 404: return "not Found" case 418: return "I am a teapot" case _: return "something's wrong with the internet" mystatus=400 print(http_error(mystatus)) # bad request
Python3 循环语句
斐波纳契数列 n=3 a, b = 0,1 for i in range(n): print("斐波纳契数列为%d"%(b)) a,b = b,a+b print("a is %d b is %d" %(a,b)) ''' 其中代码 a, b = b, a+b 的计算方式为先计算右边表达式,然后同时赋值给左边,等价于: n=b m=a+b a=n b=m ''' [Running] /usr/bin/python3 "/home/evan/tmp/py/2.py" 斐波纳契数列为1 a is 1 b is 1 斐波纳契数列为1 a is 1 b is 2 斐波纳契数列为2 a is 2 b is 3
Python 推导式
Python3 迭代器与生成器
Python3 函数
def area(width, height): return width * height def print_welcome(name): print("welcome",name) print_welcome("evan") w = 4 h = 5 print("width =", w, "height =", h , "area =", area(w,h)) welcome evan width = 4 height = 5 area = 20
x = lambda a : a + 10 print(x(5)) # Output: 15
强制位置参数
https://www.runoob.com/python3/python3-function.html
https://zhuanlan.zhihu.com/p/412273465
参数传递
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
参数
以下是调用函数时可使用的正式参数类型:
必需参数 关键字参数 默认参数 不定长参数
必需参数
关键字参数
键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
def printinfo( name, age): print ("name:", name) print ("age:", age ) printinfo( age=40, name="nick") name: nick age: 40
默认参数
def printinfo( name, age=33): print ("name:", name) print ("age:", age ) printinfo( age=40, name="nick") print("88888888888888") printinfo( name="evan") name: nick age: 40 88888888888888 name: evan age: 33
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下: def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression] 加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。 def printinfo( arg1, *vartuple ): print("输出") print(arg1) print(vartuple) printinfo( 70,60,50) 输出 70 (60, 50) 还有一种就是参数带两个星号 **基本语法如下: def functionname([formal_args,] **var_args_dict ): "函数_文档字符串" function_suite return [expression] 加了两个星号 ** 的参数会以字典的形式导入 def printinfo( arg1, **vardict ): print("输出") print(arg1) print(vardict) printinfo( 70,a=33,b=50) 输出 70 {'a': 33, 'b': 50}
匿名函数
Python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda 只是一个表达式,函数体比 def 简单很多
语法 lambda 函数的语法只包含一个语句,如下: lambda [arg1 [,arg2,.....argn]]:expression 设置参数 a 加上 10: 实例 x = lambda a : a + 10 print(x(5)) sum = lambda arg1, arg2: arg1 + arg2 print("相加后的value" ,sum( 10, 20)) print("相加后的value" ,sum( 20, 30))
return 语句
def sum( arg1, arg2 ): total = arg1 + arg2 print("函数内 : ",total) return total total = sum(10,20) print("函数外",total) 函数内 : 30 函数外 : 30
强制位置参数
Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。 在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参: def f(a, b, /, c, d, *, e, f): print(a, b, c, d, e, f) 以下使用方法是正确的: f(10, 20, 30, d=40, e=50, f=60) 以下使用方法会发生错误: f(10, b=20, c=30, d=40, e=50, f=60) # b 不能使用关键字参数的形式 f(10, 20, 30, 40, 50, f=60) # e 必须使用关键字参数的形式
Python lambda(匿名函数)
# x=lambda a : a + 10 # print(x(5)) # sum = lambda arg1, arg2: arg1 + arg2 # print("相加后的value" ,sum( 10, 20)) # print("相加后的value" ,sum( 20, 30)) # def sum( arg1, arg2 ): # total = arg1 + arg2 # print("函数内 : ",total) # return total # total = sum(10,20) # print("函数外",total) # 函数内 : 30 # 函数外 : 30 # x = lambda a : a + 1 # print(x(2)) # x = lambda a, b , c : a + b + c # print(x(5,6,2)) # numbers = [1,2,3,4,5] # squared = list(map(lambda x: x**2,numbers)) # print(squared) # # Output: [1, 4, 9, 16, 25] # numbers=[1,2,3,4,5,6,7,8] # even_numbrs = list(filter(lambda x: x % 2 ==0, numbers)) # print(even_numbrs) # # Output: [2, 4, 6, 8] from functools import reeuce numbers = [1,2,3,4,5] product = reduce(lambda x,y: x*y, numbers) print(product) # Output: 120
Python 装饰器
语法 def decorator_function(original_function): def wrapper(*args, **kwargs): # 这里是在调用原始函数前添加的新功能 before_call_code() result = original_function(*args, **kwargs) # 这里是在调用原始函数后添加的新功能 after_call_code() return result return wrapper # 使用装饰器 @decorator_function def target_function(arg1, arg2): pass # 原始函数的实现 使用装饰器 装饰器通过 @ 符号应用在函数定义之前,例如: @time_logger def target_function(): pass 等同于: def target_function(): pass target_function = time_logger(target_function) 这会将 target_function 函数传递给 decorator 装饰器,并将返回的函数重新赋值给 target_function。从而,每次调用 target_function 时,实际上是调用了经过装饰器处理后的函数。 通过装饰器,开发者可以在保持代码整洁的同时,灵活且高效地扩展程序的功能