“Python基础”的版本间的差异
第126行: | 第126行: | ||
In [7]: [item for item in os.listdir(os.path.expanduser('/tmp')) if os.path.isdir(item)] | In [7]: [item for item in os.listdir(os.path.expanduser('/tmp')) if os.path.isdir(item)] | ||
Out[7]: [] | Out[7]: [] | ||
+ | |||
+ | 打印最常用10条命令 | ||
+ | import os | ||
+ | from collections import Counter | ||
+ | |||
+ | c = Counter() | ||
+ | |||
+ | # 读取bash历史记录文件并统计命令频率 | ||
+ | with open(os.path.expanduser('~/.bash_history')) as f: | ||
+ | for line in f: | ||
+ | # whith open(os.path.expanduser(' ~/.bash_history')) as f: | ||
+ | |||
+ | cmd = line.strip().split() | ||
+ | if cmd: | ||
+ | c[cmd[0]] += 1 | ||
+ | print(c.most_common(10)) | ||
+ | |||
+ | |||
+ | |||
+ | # with open('example.txt', 'r') as file: | ||
+ | # content = file.read() | ||
+ | # print(content) | ||
+ | |||
+ | # [('ls', 352), ('cd', 309), ('bash', 161), ('cat', 114), ('vim', 78), ('sudo', 54), ('vi', 46), ('geany', 33), ('ssh', 31), ('python3', 27)] | ||
+ | # [('ls', 352), ('cd', 309), ('bash', 161), ('cat', 114), ('vim', 78), ('sudo', 54), ('vi', 46), ('geany', 33), ('ssh', 31), ('python3', 27)] | ||
+ | # [('ls', 352), ('cd', 309), ('bash', 162), ('cat', 114), ('vim', 78), ('sudo', 54), ('vi', 46), ('geany', 33), ('ssh', 31), ('python3', 27)] | ||
</pre> | </pre> |
2024年10月19日 (六) 11:00的版本
目录
- 1 2024
- 2 Python项目读取配置方式
- 3 python中字典的循环遍历的两种方式
- 4 python3 遍历列表list 四种方法
- 5 python文件操作
- 6 Python 函数返回值
- 7 py linux系统管理
- 8 range
- 9 learn
2024
https://liaoxuefeng.com/books/python/function/recursive-function/index.html
recursive暂时跳过
project 2024
github/python/project/chapter25CGI/2024
Python format 格式化函数
一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。 基本语法是通过 {} 和 : 来代替以前的 % 。 "{} {}".format("hello", "world") # 不设置指定位置,按默认顺序 'hello world' eg 2 print("""Content-type: text/html <html> <head> <title>Simple Edit</title> </head> <body> <form method="post" action="simple_edit.cgi" method="POST"> <textarea name="text" rows="20" cols="20">{}</textarea> <br /> <input type="submit" > </form> </body> </html> """.format(text))
https://www.runoob.com/python/att-string-format.html
abspath
In [1]: import os In [2]: os.path.abspath("w.py") Out[2]: '/home/evan/data/python/cgi/w.py' In [3]: ls 1.cgi* edit.cgi index.html powers.py save.cgi simple_edit.cgi* simple_edit.dat w.py*
https://stackoverflow.com/questions/51520/how-to-get-an-absolute-file-path-in-python
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 函数返回值
py linux系统管理
In [6]: [item for item in os.listdir(os.path.expanduser('/tmp')) if os.path.isdir(item)] Out[6]: [] In [7]: [item for item in os.listdir(os.path.expanduser('/tmp')) if os.path.isdir(item)] Out[7]: [] 打印最常用10条命令 import os from collections import Counter c = Counter() # 读取bash历史记录文件并统计命令频率 with open(os.path.expanduser('~/.bash_history')) as f: for line in f: # whith open(os.path.expanduser(' ~/.bash_history')) as f: cmd = line.strip().split() if cmd: c[cmd[0]] += 1 print(c.most_common(10)) # with open('example.txt', 'r') as file: # content = file.read() # print(content) # [('ls', 352), ('cd', 309), ('bash', 161), ('cat', 114), ('vim', 78), ('sudo', 54), ('vi', 46), ('geany', 33), ('ssh', 31), ('python3', 27)] # [('ls', 352), ('cd', 309), ('bash', 161), ('cat', 114), ('vim', 78), ('sudo', 54), ('vi', 46), ('geany', 33), ('ssh', 31), ('python3', 27)] # [('ls', 352), ('cd', 309), ('bash', 162), ('cat', 114), ('vim', 78), ('sudo', 54), ('vi', 46), ('geany', 33), ('ssh', 31), ('python3', 27)]
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 装饰器
https://www.runoob.com/python3/python-decorators.html
语法 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 时,实际上是调用了经过装饰器处理后的函数。 通过装饰器,开发者可以在保持代码整洁的同时,灵活且高效地扩展程序的功能 def repeat(n): def decorator(func): def wrapper(*args, **kwargs): for i in range(n): result = func(*args, **kwargs) return result return wrapper return decorator @repeat(3) def greet(name): print("Hello, " + name) greet("Evan") Hello, Evan Hello, Evan Hello, Evan
Python3 数据结构
Python3 模块
Python3 File(文件) 方法
Python3 面向对象
class MyClass: i = 12345 def f(self): return 'hello evan' x = MyClass() print("Myclass类的属性i 为:",x.i) print("Myclass类的方法f 的返回值为:",x.f()) Myclass类的属性i 为: 12345 Myclass类的方法f 的返回值为: hello evan