Task 04 变量与函数 Variables and Functions
变量 variables
变量的概念老生常谈,便于理解,简单说明即可
基本概念
- 变量是一个名字,指代它所覆盖的数据
- 变量需要赋值,使用
=
号 - 在python中,没有指针的概念,但也可以说每一个变量都是一个指针
a = 8 #python在变量命名是不需要提前说明变量类型(python天下第一)
print(a)
8
print(a-2)
6
- 新的值可以覆盖旧的值
- 新的数据类型不必与旧的相同
a = True
print(a)
True
a = "振翅云顶之上,极目星辰大海"
print(a)
振翅云顶之上,极目星辰大海
变量命名规则
- 必须以字母或下划线(
_
)开头 - 命名可由字母、数字和下划线组成
- 大小写敏感
- 尽量避免使用保留字命名
保留字
import keyword
print(keyword.kwlist)
['False','None','True','__peg_parser__','and','as','assert','async','await','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']
多变量命名
python支持多变量命名,方式如下
a = b = c = 6
print(f"a={a}, b={b}, c={c}")
a=6, b=6, c=6
a, b, c = 3, 6, 9
print(f"a={a}, b={b}, c={c}")
a=3, b=6, c=9
函数 Functions
函数概念
- 函数是一个代码块,可以被反复调用,执行功能
- 函数由两部分组成,即
header
和body
- 函数在项目中会大量使用,完成分段式编程,以防部分代码出错牵连整个程序
header
header用来定义函数的名称和参数
- header以
:
结尾,并在后面跟着body
部分 - 当函数被调用时,括号内的参数会被提供给函数进行后续运行
- 可以提供多个参数
header具体写法
def name(x):pass #pass表示临时组建函数并且不被调用#python对缩进十分敏感
body
- body中包含函数的主体部分,也就是参数被传入后执行的具体操作
- body结束后一般会用return返回值,当然并不绝对
- 缩进很重要
在这里写一个完整的函数作为示例
def yunding(x):print("振翅云顶之上,极目星辰大海")return x
print(yunding(me))
振翅云顶之上,极目星辰大海
me
- 用函数名调用函数
- 函数会返回一个值,但并不是直接打印一个值
函数的参数可以有很多个, 也可以没有,但是数量一定要匹配
多返回值
多返回值相当于返回了一个 list
def Multi_Return_Values():return 6,6,6
a,b,c = Multi_Return_Values()
print(f"a={a}, b={b}, c={c}")
a=6, b=6, c=6
内置函数
在python中,有一些官方内置的函数
强制类型转换
类型转换也是一种函数,比如将浮点数转换为整数
a = 5.2
print(a)
5.2
int(a)
print(a)
5 #转换为整型后没有小数点
基本数学函数(无需调用math库)
print(abs(-5)) # 绝对值
5
print(max(2,3)) # 返回最大值
3
print(min(2,3)) # 返回最小值
2
print(pow(2,10)) # 次方运算,等价于 2**10
1024
print(round(2.354, 2)) # 取最近的一个整数(并不完全是四舍五入,二进制精度丢失) ## 保留两位小数,用round(四舍五入表示的是二进制小数(或者用decimal库来避免))
2.35
变量作用域
每个变量都有自己的作用范围,超出范围后变量不存在,并且一定要尽量避免使用全局变量
- 函数内定义的变量仅在函数内部作用
- 函数外定义的变量是全局变量,如果想在函数内改变它的值需要声明它是全局变量
g = 100def f(x):global g #对变量进行声明,否则python会假设它是局部变量g += 1return x + gprint(f(5))
print(f(6))
print(g)
106
108
102
嵌套函数(递归)
对于嵌套函数来说,一定会先执行最内层的函数
嵌套函数运用最广的地方就是递归,而递归是一种重要的编程思想,在这里我们着重讲解
递归的概念
递归(recursion)是一种算法策略,通过函数调用自身来解决问题。他主要包含两个阶段
- 递:程序不断地调用自身,通常是传入更小或更简化的参数,直到达到 "终止条件"
- 归:触发"终止条件"之后,函数从最深层的递归函数逐层返回,并汇聚每一层的结果
递归函数的三个要素
- 终止条件:在触发
终止条件
后,由递
转归
- 递归调用:参考概念中的
递
- 返回结果:参考概念中的
归
如果实在理解不了递归,似乎也可以用这三个条件硬写
思考
事实上到此为止我对于递归的理解也极为有限,所以说一些我对于递归的思考
- 递归是一个从上到下解决问题的过程,将原问题一直分解为更小的子问题,在遇到终止条件后逐级返回,当然这样的思想十分反人类,所以写的时候千万不能多想
- 递归每一次调用自身时,系统都会为新开启的函数分配内存,因此递归的时间效率较低,太深可能会导致栈溢出
- 尾递归还看不懂,先丢个链接吧
hello算法:迭代与递归
终于把递归的笔记完善,或者说搞懂递归哦,已经过了ddl,代码风格的一定会在明写完的()