# python **Repository Path**: itic/python ## Basic Information - **Project Name**: python - **Description**: 我一定会成为人类历史上最伟大的Python工程师。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-08-08 - **Last Updated**: 2025-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README # Python > Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。 > > 编译器和解释器的区别: > > 编译器一次性把高级语言(源代码)转化为目标代码,然后再运行,这样不易修改程序,比如java。 > > 解释器边转化源代码为目标代码,边运行,这样程序易于修改,比如python。 > > 用编译器运行的编程语言为静态语言。 > > 用解释器运行的编程语言为脚本语言。 ## 环境搭建 ### Python下载 [官网](https://www.python.org/) ### Windows安装 * 在打开的命令提示符窗口中,输入以下命令之一,然后按回车: * python --version * python -V (注意是大写的 V) * 也可以在开始菜单中搜索 IDLE ## 基础语法 ### 标识符 * 第一个字符必须以字母(a-z, A-Z)或下划线 _ 。 * 标识符的其他的部分由字母、数字和下划线组成 ### Python 保留关键字 > Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字: > ```python # 导入 keyword 模块,它提供了与 Python 关键字相关的工具 import keyword # 查看所有 Python 关键字的列表 print(keyword.kwlist) ``` ### 注释 ```python #!/usr/bin/python3 # 第一个注释 # 第二个注释 ''' 第三注释 第四注释 ''' """ 第五注释 第六注释 """ print ("Hello, Python!") ``` ### 行与缩进 * Python 使用缩进来表示代码块,不需要使用大括号 {} 。 ```python if True: print ("True") else: print ("False") ``` ### 多行语句 * Python 语句中,如果一行代码写不下,可以分为多行,语句后面的换行符(\)用来表示语句的结束。 ```python total = item_one + \ item_two + \ item_three ``` ### 数字(Number)类型 * int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。 * bool (布尔), 如 True。 * float (浮点数), 如 1.23、3E-2 * complex (复数) - 复数由实部和虚部组成,形式为 a + bj,其中 a 是实部,b 是虚部,j 表示虚数单位。如 1 + 2j、 1.1 + 2.2j ### 字符串(String) * Python 中单引号 ' 和双引号 " 使用完全相同。 * 使用三引号(''' 或 """)可以指定一个多行字符串。 * 转义符 \。 * 反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。 如 r"this is a line with \n" 则 \n 会显示,并不是换行。 * 按字面意义级联字符串,如 "this " "is " "string" 会被自动转换为 this is string。 * 字符串可以用 + 运算符连接在一起,用 * 运算符重复。 * Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。 * Python 中的字符串不能改变。 * Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。 * 字符串切片 str[start:end],其中 start(包含)是切片开始的索引,end(不包含)是切片结束的索引。 * 字符串的切片可以加上步长参数 step,语法格式如下:str[start:end:step] ### import 与 from...import ```python 在 python 用 import 或者 from...import 来导入相应的模块。 将整个模块(somemodule)导入,格式为: import somemodule 从某个模块中导入某个函数,格式为: from somemodule import somefunction 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc 将某个模块中的全部函数导入,格式为: from somemodule import * ``` ```python import sys print('================Python import mode==========================') print ('命令行参数为:') for i in sys.argv: print (i) print ('\n python 路径为',sys.path) ``` ```python from sys import argv,path # 导入特定的成员 print('================python from import===================================') print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path ``` ### 条件控制 ### if...elif...else ```python score = 85 if score >= 90: print("优秀") elif score >= 80: print("良好") elif score >= 60: print("及格") else: print("不及格") ``` ### match...case > 在 Python 中(从 3.10 开始),match-case 语句支持使用 |(竖线)来表示“或”逻辑,匹配多个值 > ```python status = 403 match status: case 401 | 403 | 404: print("Not allowed") case 200: print("OK") case _: print("Other") ``` * 类似于Java 的swithc case,但是比Java 更加简单。Python 的 match-case 语句不需要也不支持 break ```java String message; switch (status) { case 401: case 403: case 404: message = "Not allowed"; break; default: message = "OK"; break; } ``` ### while循环控制 > 在 Python 中没有 do..while 循环。 ```python #!/usr/bin/python3 # 如果 while 后面的条件语句为 false 时,则执行 else 的语句块。 count = 0 while count < 5: print (count, " 小于 5") count = count + 1 else: print (count, " 大于或等于 5") ``` ### for语句 > 当循环执行完毕后,会执行 else 子句中的代码,如果在循环过程中遇到了 break 语句,则会中断循环,此时不会执行 else 子句。 ```python #!/usr/bin/python3 sites = ["Baidu", "Google","Runoob","Taobao"] for site in sites: if site == "Runoob": print("菜鸟教程!") break print("循环数据 " + site) else: print("没有循环数据!") print("完成循环!") # 循环数据 Baidu # 循环数据 Google # 菜鸟教程! # 完成循环! ``` ### pass 语句 > pass 语句什么都不做,一般用于占位。 > > ### Python 推导式 > Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。 * 列表(list)推导式 ```python [表达式 for 变量 in 列表 if 条件] [out_exp_res for out_exp in input_list if condition] out_exp_res:列表生成元素表达式,可以是有返回值的函数。 for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。 if condition:条件语句,可以过滤列表中不符合条件的值。 ``` * 字典(dict)推导式 ```python { key_expr: value_expr for value in collection if condition } # 将列表中各字符串值为键,各字符串的长度为值,组成键值对 listdemo = ['Google','Runoob', 'Taobao'] newdict = {key:len(key) for key in listdemo} # {'Google': 6, 'Runoob': 6, 'Taobao': 6} ``` * 集合(set)推导式 ```python { expression for item in Sequence if conditional } ``` * 元组(tuple)推导式 ```python # 元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。 (expression for item in Sequence if conditional ) ``` ### Python lambda(匿名函数) ```python lambda arguments: expression ``` ### Python 装饰器 > 装饰器的语法使用 @decorator_name 来应用在函数或方法上。 > > Python 还提供了一些内置的装饰器,比如 @staticmethod 和 @classmethod,用于定义静态方法和类方法。 ```python def my_decorator(func): def wrapper(*args, **kwargs): print("在原函数之前执行") func(*args, **kwargs) print("在原函数之后执行") return wrapper @my_decorator def greet(name): print(f"Hello, {name}!") greet("Alice") ``` ## Python基本数据类型 ### 多变量赋值 * `a = b = c = 1` * `a, b, c = 1, 2, "runoob"` * 查看数据类型 ```python # 变量定义 x = 10 # 整数 y = 3.14 # 浮点数 name = "Alice" # 字符串 is_active = True # 布尔值 # 多变量赋值 a, b, c = 1, 2, "three" # 查看数据类型 print(type(x)) # print(type(y)) # print(type(name)) # print(type(is_active)) # # 内置的 type() 函数可以用来查询变量所指的对象类型。 此外还可以用 isinstance 来判断: isinstance 和 type 的区别在于: type() 只检查对象的“直接类型”,不会考虑继承关系。 isinstance() 会考虑继承关系,因此子类实例也被认为是父类的“实例”。 >>> class A: ... pass ... >>> class B(A): ... pass ... >>> isinstance(A(), A) True >>> type(A()) == A True >>> isinstance(B(), A) True >>> type(B()) == A False ``` ### 标准数据类型 * Python3 中常见的数据类型有: * Number(数字) * Python3 支持 int、float、bool、complex(复数)。 * String(字符串) * Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。 * bool(布尔类型) * 在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。 * List(列表) * 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 * 和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。 * 加号 + 是列表连接运算符,星号 * 是重复操作 * Tuple(元组) * 元组(tuple)与列表类似,不同之处在于元组的元素**不能修改**。元组写在小括号 () 里,元素之间用逗号隔开。 ```python 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则: tup1 = () # 空元组 tup2 = (20,) # 一个元素,需要在元素后添加逗号 如果你想创建只有一个元素的元组,需要注意在元素后面添加一个逗号,以区分它是一个元组而不是一个普通的值,这是因为在没有逗号的情况下,Python会将括号解释为数学运算中的括号,而不是元组的表示。 ``` * Set(集合) * 在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。 * 另外,也可以使用 set() 函数创建集合。 * 注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 ```python a = set('abracadabra') # {'a', 'b', 'r', 'c', 'd'} b = set('alacazam') # {'a', 'l', 'c', 'z', 'm'} print(a - b) # 差集:{'b', 'r', 'd'} print(a | b) # 并集:{'a', 'b', 'r', 'c', 'd', 'l', 'z', 'm'} print(a & b) # 交集:{'a', 'c'} print(a ^ b) # 对称差集(并集减交集):{'b', 'r', 'd', 'l', 'z', 'm'} ``` * Dictionary(字典) * 字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。 * Python3 的六个标准数据类型中: * 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组); * 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。 * 此外还有一些高级的数据类型,如: 字节数组类型(bytes)。 ### 字符串 #### f-string > f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。 ```python 之前我们习惯用百分号 (%): >>> name = 'Runoob' >>> 'Hello %s' % name 'Hello Runoob' f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去。 >>> name = 'Runoob' >>> f'Hello {name}' # 替换变量 'Hello Runoob' >>> f'{1+2}' # 使用表达式 '3' >>> w = {'name': 'Runoob', 'url': 'www.runoob.com'} >>> f'{w["name"]}: {w["url"]}' 'Runoob: www.runoob.com' ``` ### 列表 * Python 列表(`list`)常用函数 | 序号 | 函数 | 描述 | |------|--------------|--------------------------| | 1 | `len(list)` | 返回列表中元素的个数 | | 2 | `max(list)` | 返回列表中的最大值 | | 3 | `min(list)` | 返回列表中的最小值 | | 4 | `list(seq)` | 将元组(或其他可迭代对象)转换为列表 | * 列表常用方法 | 序号 | 方法 | 描述 | |------|----------------------------------|----------------------------------------------------------------------| | 1 | `list.append(obj)` | 在列表末尾添加一个新的对象 | | 2 | `list.count(obj)` | 统计某个元素在列表中出现的次数 | | 3 | `list.extend(seq)` | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原列表) | | 4 | `list.index(obj)` | 返回列表中第一个匹配值的索引位置 | | 5 | `list.insert(index, obj)` | 在指定位置 `index` 插入对象 `obj` | | 6 | `list.pop([index=-1])` | 移除并返回列表中指定位置的元素(默认为最后一个元素) | | 7 | `list.remove(obj)` | 移除列表中第一个值等于 `obj` 的元素 | | 8 | `list.reverse()` | 将列表中的元素顺序反转 | | 9 | `list.sort(key=None, reverse=False)` | 对列表进行原地排序(可选:按 `key` 函数排序,`reverse=True` 降序) | | 10 | `list.clear()` | 清空列表,移除所有元素 | | 11 | `list.copy()` | 返回列表的一个浅拷贝 | > 💡 **注意**: > - 所有方法均直接作用于原列表(**就地修改**),除了 `copy()`、`count()`、`index()` 等返回新值或信息的方法。 > - `sort()` 和 `reverse()` 不返回新列表,而是修改原列表。若需保留原列表,请先使用 `copy()`。 ### 元组 > - Python 的元组与列表类似,不同之处在于元组的元素不能修改。 > - 元组使用小括号 ( ),列表使用方括号 [ ]。 ```python 创建空元组 tup1 = () 元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用: >>> tup1 = (50) >>> type(tup1) # 不加逗号,类型为整型 >>> tup1 = (50,) >>> type(tup1) # 加上逗号,类型为元组 ``` ### 字典 * 创建字典 ```python # 使用大括号 {} 来创建空字典 emptyDict = {} # 使用内建函数 dict() 创建字典: emptyDict = dict() ``` * 修改字典 * 删除字典 ```python del dictName[key] clean dictName del dictName ``` ### 集合 * 创建集合 ```python emptySet = set() emptySet = {} ``` * 添加元素 ```python 将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。 setName.add(value) 还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等 setName.update(iterable) ``` * 删除元素 ```python 将元素从集合中移除,如果元素不存在,则会发生错误。 setName.remove(value) 此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。 setName.discard(value) 也可以设置随机删除集合中的一个元素 setName.pop() ``` ## Python 运算符 ### 海象运算符 > 海象运算符(:=)在 Python 3.8 中引入,用于赋值并返回。 > > 基本语法格式为:`(变量 := 表达式)` ```python # 传统写法 data = input("请输入数据:") if len(data) > 5: print(f"数据长度为{len(data)},超过5个字符") # 使用海象运算符 if (n := len(input("请输入数据:"))) > 5: print(f"数据长度为{n},超过5个字符") ``` ### Python逻辑运算符 | 运算符 | 语法 | 行为说明 | 示例(设 `a = 10`, `b = 20`) | 返回值 | |--------|------------|--------------------------------------------------------------------------|-----------------------------------|--------| | `and` | `x and y` | 如果 `x` 为 `False`,返回 `x`;否则返回 `y` 的计算值。 | `(a and b)` | `20` | | `or` | `x or y` | 如果 `x` 为 `True`,返回 `x`;否则返回 `y` 的计算值。 | `(a or b)` | `10` | | `not` | `not x` | 如果 `x` 为 `True`,返回 `False`;如果 `x` 为 `False`,返回 `True`。 | `not (a and b)` | `False` | > **提示**:在 Python 中,非零数字(如 `10`、`20`)被视为 `True`,而 `0`、`None`、空容器等被视为 `False`。 ### Python成员运算符 | 运算符 | 描述 | 实例 | |--------|------|------| | `in` | 如果在指定的序列中找到值返回 True,否则返回 False。 | `x in y` 序列中,如果 x 在 y 序列中返回 True。 | | `not in` | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | `x not in y` 序列中,如果 x 不在 y 序列中返回 True。 | ### Python身份运算符 | 运算符 | 描述 | 实例 | |--------|------|------| | `is` | `is` 是判断两个标识符是不是引用自一个对象 | `x is y`,类似 `id(x) == id(y)`,如果引用的是同一个对象则返回 `True`,否则返回 `False` | | `is not` | `is not` 是判断两个标识符是不是引用自不同对象 | `x is not y`,类似 `id(x) != id(y)`。如果引用的不是同一个对象则返回 `True`,否则返回 `False`。 | > **提示**:`id()` 函数用于获取对象内存地址。 > > is 与 == 区别: > > is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。 > > Python 的 == ≈ Java 的 .equals() > > Python 的 is ≈ Java 的 == ```python #!/usr/bin/python3 a = 20 b = 20 if ( a is b ): print ("1 - a 和 b 有相同的标识") else: print ("1 - a 和 b 没有相同的标识") if ( id(a) == id(b) ): print ("2 - a 和 b 有相同的标识") else: print ("2 - a 和 b 没有相同的标识") # 修改变量 b 的值 b = 30 if ( a is b ): print ("3 - a 和 b 有相同的标识") else: print ("3 - a 和 b 没有相同的标识") if ( a is not b ): print ("4 - a 和 b 没有相同的标识") else: print ("4 - a 和 b 有相同的标识") ``` ## Python脚本式编程 * 在Linux/Unix系统中,你可以在脚本顶部添加以下命令让Python脚本可以像SHELL脚本一样可直接执行: 1. 脚本第一行:`#!/usr/bin/env python3` (使用 env 命令在系统的 PATH 环境变量中查找 python3 可执行文件的位置) 或者 `#!/usr/bin/python3` (直接指定 Python 解释器的绝对路径) 2. 然后修改脚本权限,使其有执行权限:`$ chmod +x hello.py` 3. 最后运行脚本:`./hello.py`