作业链接
1.相同变量的赋值类型可以不同
a=1
a=True
print(a)
输出为True
说明对变量的赋值,不存在类型的限制,后面的值会找到覆盖掉前面的值。
2.变量是对对象的引用
每个变量都指向了一个对象的内存地址,当创建一个变量并给他赋值时,Python会为该值分配内存,并让变量指向这个内存地址。
(1)不可变对象:整数、字符串、元组等
在被“修改”时实际上是创建了一个新的对象,因为这些对象一旦创建其值就不能改变。
如
a=1
b=a
a=2
print(f"a={a}")
print(f"b={b}")
输出
a=2
b=1
整数a创建了一个新的对象,而b没有动,不受a的影响。
(2)可变对象:列表、字典、集合等
可以被修改,因为它们的数据结构允许在内存中直接修改数据,而不是创建新对象。
3.变量的命名规则
(1)变量名必须以字母(a-z, A-Z)或下划线(_)开头。
(2)变量名不能以数字开头。
(3)变量名只能包含字母、数字和下划线(a-z, A-Z, 0-9, _)。
(4)变量名是大小写敏感的,这意味着variable和Variable是两个不同的变量。
(5)变量名不能是Python的关键字,如if, while, True, False等。Python有35个关键字,这些关键字有特殊的意义和用途,不能用作变量名。
(6)变量名应该简洁且具有描述性,通常使用小写字母和下划线来分隔单词,这种命名方式被称为“小蛇”式(snake_case)。
(7)变量名不能包含空格或其他标点符号。
4.多变量赋值
(1)单个值赋给多个变量:
a = b = c = 10
这里,a、b和c都赋值为10。
(2)使用元组或列表解包赋值:
a, b, c = 1, 2, 3
这里,a被赋值为1,b被赋值为2,c被赋值为3。
(3)也可以从列表或元组中解包值并赋给多个变量:
values = [10, 20, 30]
a, b, c = values
这里,a、b和c分别被赋值为10、20和30。
(4)使用星号(*)来收集多余的值:
a, *b, c = [1, 2, 3, 4, 5]
这里,a被赋值为1,c被赋值为5,而b被赋值为[2, 3, 4](注意b是一个列表,因为它收集了多余的值)。
多变量赋值在处理函数返回多个值、交换变量值等场景时非常有用。例如,交换两个变量的值:
a, b = b, a
在这个例子中,a和b的值被交换,这是通过创建一个元组(b, a)并解包到a和b来实现的。
5.函数
基本语法:
def function_name(parameters):
"""
文档字符串(docstring):用于描述函数的作用,可选。
"""
# 函数体:实现特定功能的代码
...
return expression # 返回值,如果没有返回值,这行可以省略
(1)def关键字是声明函数的关键字。
(2)function_name是函数的名称,它应该遵循变量命名的规则。
(3)parameters是传递给函数的信息,可以是任意类型的对象。函数可以没有参数,也可以有多个参数,参数之间用逗号分隔。
(4)函数体是缩进的代码块,它包含了实现函数功能的代码。
注意:Python有严格的缩进要求,正确的缩进对于Python程序的正常运行至关重要。同一个代码块中的语句必须具有相同的缩进级别。
(5)return关键字用于从函数中返回一个值(也可以是多个值,用逗号隔开)。return也可以返回一个表达式的结果,任何类型的数据都可以被返回,如字典、列表等。函数可以没有return语句,这时函数会返回一个None值。如果函数有多个return语句,当执行到其中一个return语句时,函数会立即返回,并忽略后面的代码。
参数:
参数的传递数量需要匹配,形参和实参的数量不相同会报错。
6.修改函数内的值
函数内定义的变量为局部变量,要想在函数中修改外部的全局变量的值,需要用global来声明变量为全局变量。
x = 10 # 全局变量
def my_function():
global x # 声明x为全局变量
x = 20 # 修改全局变量x的值
my_function()
print(x) # 输出: 20
注意:global关键字只能在函数内部使用,用于声明函数外的变量。如果在函数内部声明了一个全局变量,但没有在函数外定义该变量,那么在函数内部对该变量的赋值将会创建一个新的全局变量。
7.函数嵌套
函数是可以嵌套使用的,从最内层的函数开始运行。
def outer_function(text):
def inner_function():
return text.upper()
return inner_function()
result = outer_function("hello")
print(result) # 输出: HELLO
8.递归
递归允许函数调用自身,用于通过解决一系列较小的问题解决一个较大的问题,直到达到一个最简单的问题。
如,经典斐波那契数列
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
# 打印前10个斐波那契数
for i in range(10):
print(fibonacci(i))