1、AI及LLM基础:Python语法入门教程
Python语法入门教程
这是一份全面的Python语法入门教程,涵盖了注释、变量类型与操作符、逻辑运算、list和字符串、变量与集合、控制流和迭代、模块、类、继承、进阶等内容,通过详细的代码示例和解释,帮助大家快速熟悉Python语法。
文章目录
- Python语法入门教程
- 一、注释
- 二、基础变量类型与操作符
- 2.1 逻辑运算
- 2.2 list和字符串
- 三、变量与集合
- 3.1 输入输出
- 3.2 变量
- 3.3 list
- 3.4 tuple
- 3.5 dict
- 3.6 set
- 四、控制流和迭代
- 4.1 判断语句
- 4.2 循环
- 4.3 捕获异常
- 4.4 with操作
- 4.5 可迭代对象
- 4.6 函数
- 五、模块
- 六、类
- 七、继承
- 7.1 多继承
- 八、进阶
- 8.1 生成器
- 8.2 装饰器
- 九、结尾
一、注释
Python中用#表示单行注释,#之后的同行的内容都会被注释掉。
# Python中单行注释用#表示,#之后同行字符全部认为被注释。
使用三个连续的双引号表示多行注释,两个多行注释标识之间内容会被视作是注释。
""" 与之对应的是多行注释用三个双引号表示,这两段双引号当中的内容都会被视作是注释
"""
二、基础变量类型与操作符
Python当中的数字定义和其他语言一样:
# 获得一个整数
3
# 获得一个浮点数
10.0
我们分别使用+, -, *, /表示加减乘除四则运算符。
1 + 1 # => 2
8 - 1 # => 7
10 * 2 # => 20
35 / 5 # => 7.0
这里要注意的是,在Python2当中,10/3这个操作会得到3,而不是3.33333。因为除数和被除数都是整数,所以Python会自动执行整数的计算,帮我们把得到的商取整。如果是10.0 / 3,就会得到3.33333。目前Python2已经不再维护了,可以不用关心其中的细节。
但问题是Python是一个弱类型的语言,如果我们在一个函数当中得到两个变量,是无法直接判断它们的类型的。这就导致了同样的计算符可能会得到不同的结果,这非常蛋疼。以至于程序员在运算除法的时候,往往都需要手工加上类型转化符,将被除数转成浮点数。
在Python3当中拨乱反正,修正了这个问题,即使是两个整数相除,并且可以整除的情况下,得到的结果也一定是浮点数。
如果我们想要得到整数,我们可以这么操作:
5 // 3 # => 1
-5 // 3 # => -2
5.0 // 3.0 # => 1.0 # works on floats too
-5.0 // 3.0 # => -2.0
两个除号表示取整除,Python会为我们保留去除余数的结果。
除了取整除操作之外还有取余数操作,数学上称为取模,Python中用%表示。
# Modulo operation
7 % 3 # => 1
Python中支持乘方运算,我们可以不用调用额外的函数,而使用**符号来完成:
# Exponentiation (x**y, x to the yth power)
2**3 # => 8
当运算比较复杂的时候,我们可以用括号来强制改变运算顺序。
# Enforce precedence with parentheses
1 + 3 * 2 # => 7
(1 + 3) * 2 # => 8
2.1 逻辑运算
Python中用首字母大写的True和False表示真和假。
True # => True
False # => False
用and表示与操作,or表示或操作,not表示非操作。而不是C++或者是Java当中的&&, || 和!。
# negate with not
not True # => False
not False # => True# Boolean Operators
# Note "and" and "or" are case-sensitive
True and False # => False
False or True # => True
在Python底层,True和False其实是1和0,所以如果我们执行以下操作,是不会报错的,但是在逻辑上毫无意义。
# True and False are actually 1 and 0 but with different keywords
True + True # => 2
True * 8 # => 8
False - 5 # => -5
我们用判断相等的操作,可以看出来True1, False == 0.
# Comparison operators look at the numerical value of True and False
0 == False # => True
1 == True # => True
2 == True # => False
-5 != False # => True
我们要小心Python当中的bool()这个函数,它并不是转成bool类型的意思。如果我们执行这个函数,那么只有0会被视作是False,其他所有数值都是True:
bool(0) # => False
bool(4) # => True
bool(-6) # => True
0 and 2 # => 0
-5 or 0 # => -5
Python中用==判断相等,>表示大于,>=表示大于等于, <表示小于,<=表示小于等于,!=表示不等。
# Equality is ==
1 == 1 # => True
2 == 1 # => False# Inequality is !=
1 != 1 # => False
2 != 1 # => True# More comparisons
1 < 10 # => True
1 > 10 # => False
2 <= 2 # => True
2 >= 2 # => True
我们可以用and和or拼装各个逻辑运算:
# Seeing whether a value is in a range
1 < 2 and 2 < 3 # => True
2 < 3 and 3 < 2 # => False
# Chaining makes this look nicer
1 < 2 < 3 # => True
2 < 3 < 2 # => False
注意not,and,or之间的优先级,其中not > and > or。如果分不清楚的话,可以用括号强行改变运行顺序。
2.2 list和字符串
关于list的判断,我们常用的判断有两种,一种是刚才介绍的==,还有一种是is。我们有时候也会简单实用is来判断,那么这两者有什么区别呢?我们来看下面的例子:
a = [1, 2, 3, 4] # Point a at a new list, [1, 2, 3, 4]
b = a # Point b at what a is pointing to
b is a # => True, a and b refer to the same object
b == a # => True, a's and b's objects are equal
b = [1, 2, 3, 4] # Point b at a new list, [1, 2, 3, 4]
b is a # => False, a and b do not refer to the same object
b == a # => True, a's and b's objects are equal
Python是全引用的语言,其中的对象都使用引用来表示。is判断的就是两个引用是否指向同一个对象,而则是判断两个引用指向的具体内容是否相等。举个例子,如果我们把引用比喻成地址的话,is就是判断两个变量的是否指向同一个地址,比如说都是沿河东路XX号。而则是判断这两个地址的收件人是否都叫张三。
显然,住在同一个地址的人一定都叫张三,但是住在不同地址的两个人也可以都叫张三,也可以叫不同的名字。所以如果a is b,那么a == b一定成立,反之则不然。
Python当中对字符串的限制比较松,双引号和单引号都可以表示字符串,看个人喜好使用单引号或者是双引号。我个人比较喜欢单引号,因为写起来方便。
字符串也支持+操作,表示两个字符串相连。除此之外,我们把两个字符串写在一起,即使没有+,Python也会为我们拼接:
# Strings are created with " or '
"This is a string."
'This is also a string.'# Strings can be added too! But try not to do this.
"Hello " + "world!" # => "Hello world!"
# String literals (but not variables) can be concatenated without using '+'
"Hello " "world!" # => "Hello world!"
我们可以使用[]来查找字符串当中某个位置的字符,用len来计算字符串的长度。
# A string can be treated like a list of characters
"This is a string"[0] # => 'T'# You can find the length of a string
len("This is a string") # => 16
我们可以在字符串前面加上f表示格式操作,并且在格式操作当中也支持运算,比如可以嵌套上len函数等。不过要注意,只有Python3.6以上的版本支持f操作。
# You can also format using f-strings or formatted string literals (in Python 3.6+)
name = "Reiko"
f"She said her name is {name}." # => "She said her name is Reiko"
# You can basically put any Python statement inside the braces and it will be output in the string.
f"{name} is {len(name)} characters long." # => "Reiko is 5 characters long."
最后是None的判断,在Python当中None也是一个对象,所有为None的变量都会指向这个对象。根据我们前面所说的,既然所有的None都指向同一个地址,我们需要判断一个变量是否是None的时候,可以使用is来进行判断,当然用==也是可以的,不过我们通常使用is。
# None is an object
None # => None# Don't use the equality "==" symbol to compare objects to None
# Use "is" instead. This checks for equality of object identity.
"etc" is None # => False
None is None # => True
理解了None之后,我们再回到之前介绍过的bool()函数,它的用途其实就是判断值是否是空。所有类型的默认空值会被返回False,否则都是True。比如0,“”,[], {}, ()等。
# None, 0, and empty strings/lists/dicts/tuples all evaluate to False.
# All other values are True
bool(None)# => False
bool(0) # => False
bool("") # => False
bool([]) # => False
bool({}) # => False
bool(()) # => False
除了上面这些值以外的所有值传入都会得到True。
三、变量与集合
3.1 输入输出
Python当中的标准输入输出是input和print。
print会输出一个字符串,如果传入的不是字符串会自动调用__str__方法转成字符串进行输出。默认输出会自动换行,如果想要以不同的字符结尾代替换行,可以传入end参数:
# Python has a print function
print("I'm Python. Nice to meet you!") # => I'm Python. Nice to meet you!# By default the print function also prints out a newline at the end.
# Use the optional argument end to change the end string.
print("Hello, World", end="!") # => Hello, World!
使用input时,Python会在命令行接收一行字符串作为输入。可以在input当中传入字符串,会被当成提示输出:
# Simple way to get input data from console
input_string_var = input("Enter some data: ") # Returns the data as a string
# Note: In earlier versions of Python, input() method was named as raw_input()
3.2 变量
Python中声明对象不需要带上类型,直接赋值即可,Python会自动关联类型,如果我们使用之前没有声明过的变量则会出发NameError异常。
# There are no declarations, only assignments.
# Convention is to use lower_case_with_underscores
some_var = 5
some_var # => 5# Accessing a previously unassigned variable is an exception.
# See Control Flow to learn more about exception handling.
some_unknown_var # Raises a NameError
Python支持三元表达式,但是语法和C++不同,使用if else结构,写成:
# if can be used as an expression
# Equivalent of C's '?:' ternary operator
"yahoo!" if 3 > 2 else 2 # => "yahoo!"
上段代码等价于:
if 3 > 2:return 'yahoo'
else:return 2
3.3 list
Python中用[]表示空的list,我们也可以直接在其中填充元素进行初始化:
# Lists store sequences
li = []
# You can start with a prefilled list
other_li = [4, 5, 6]
使用append和pop可以在list的末尾插入或者删除元素:
# Add stuff to the end of a list with append
li.append(1) # li is now [1]
li.append(2) # li is now [1, 2]
li.append(4) # li is now [1, 2, 4]
li.append(3) # li is now [1, 2, 4, 3]
# Remove from the end with pop
li.pop() # => 3 and li is now [1, 2, 4]
# Let's put it back
li.append(3) # li is now [1, 2, 4, 3] again.
list可以通过[]加上下标访问指定位置的元素,如果是负数,则表示倒序访问。-1表示最后一个元素,-2表示倒数第二个,以此类推。如果访问的元素超过数组长度,则会出发IndexError的错误。
# Access a list like you would any array
li[0] # => 1
# Look at the last element
li[-1] # => 3# Looking out of bounds is an IndexError
li[4] # Raises an IndexError
list支持切片操作,所谓的切片则是从原list当中拷贝出指定的一段。我们用start: end的格式来获取切片,注意,这是一个左闭右开区间。如果留空表示全部获取,我们也可以额外再加入一个参数表示步长,比如[1:5:2]表示从1号位置开始,步长为2获取元素。得到的结果为[1, 3]。如果步长设置成-1则代表反向遍历。
# You can look at ranges with slice syntax.
# The start index is included, the end index is not
# (It's a closed/open range for you mathy types.)
li[1:3] # Return list from index 1 to 3 => [2, 4]
li[2:] # Return list starting from index 2 => [4, 3]
li[:3] # Return list from beginning until index 3 => [1, 2, 4]
li[::2] # Return list selecting every second entry => [1, 4]
li[::