变量 VARIABLES
对变量的理解
-
变量是一个名字,它指的是一段数据
-
使用 = 来对这段数据的区域进行赋值
注意:
①新的值会覆盖旧的值
②新的数据类型不必与旧的相同
y = 10
print(y - 2)
#结果为8
y = ture
print(y)
#结果为true
变量命名规则
-
必须以字母或下划线 (
_
) 开头
-
命名可有字母,数字和下划线组成
-
大小写敏感
-
尽量避免使用保留字命名
保留字
['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']
更新变量
y = 350
y //= 10
print(y) # 35
# 等价于 y = y // 2
多变量赋值
a = b = c = 2
print(f"a={a}, b={b}, c={c}")
#结果为 a=2, b=2, c=2
函数 Functions
-
函数是一个名字,代表一串代码序列(流程、过程)
-
函数由两个部分组成:header和body
-
header
用于定义函数接口(函数 名称 与 参数) -
body
包含函数所需要执行的操作
-
header
header
用于定义函数的名称和参数
-
当函数被调用时,参数将会作为变量被提供给函数的
body
部分 -
可以提供多个参数(用逗号
,
分隔),也可以不提供参数(0 个) -
header
以冒号(:
)结尾,代表后面会跟着body
部分
函数的 header
的写法:
def functionName(parameters):
pass # 函数的 body 部分,这里使用 pass 代替
body
body
包含函数执行的语句(statement
)
-
语句需要缩进(由 Code Style Guide 决定)
-
当语句不再缩进,函数部分结束
-
一般会使用
return
语句,来让函数返回其结果,但不是必须的
类似于用一个
=
来对多个变量赋值,函数的返回结果也可以不止一个(用逗号,
分隔)
def double(x):
print("我在一个名叫 “double” 函数里!")
return 2 * x
-
我们使用函数名来调用函数
-
函数名后紧跟一对括号
-
括号中是我们设定的参数的值,一个不多,一个不少(这很重要)
-
函数会返回设定的
return
语句的值
调用示例函数
double()
会返回一个值(2 * x
)
函数可以有任意多个参数,也可以一个都没有
# 三个参数
def f(x, y, z):
return x + y + z
print(f(1, 3, 2)) # 返回 6
可是如果参数数目没有匹配的话……Oops!
TypeError Traceback (most recent call last)
Cell In [29], line 1
----> 1 print(g(2))
TypeError: g() takes 0 positional arguments but 1 was giv
多返回值
def Multi_Return_Values():
return 9, 2, 8
a, b, c = Multi_Return_Values()
print(f"a={a}, b={b}, c={c}")
# 结果为 a=9, b=2, c=8
语句与表达式 Statements and Expressions
对于表达式
-
它本身是值
-
它的计算结果是值
对于语句
-
它不是值
-
它不能打印
-
但它能执行一些操作
Python 只能 print 值和表达式,如果你能用 print()
输出它,那它就是表达式
内置函数 Builtin Functions(Python自带的函数)
类型转换
print(bool(0)) # 转换为布尔类型(True or False)
print(float(42)) # 转换为浮点数
print(int(2.8)) # 转换为一个整数(舍弃小数点)
"""
结果分别为
2
False
42.0
"""
一些基本数学函数(不在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)) # 取最近的一个整数(并不完全是四舍五入,二进制精度丢失)
2.35
变量作用域 Variable Scope
-
每个变量都有属于自己的作用范围
-
超出作用范围后,变量不可见
我们设定一个函数 f(x)
, 它的内部有 x
和 y
两个变量
记得一定要重启 Jupyter Kernel!
def f(x):
print("x:", x)
y = 5
print("y:", y)
return x + y
print(f(4))
"""
结果为
x: 4
y: 5
9
"""
函数内的变量具有局部作用域,它只存在于函数内部,与其他函数中的同名变量无关
在函数外部定义变量时,变量具有全局作用域,在任何地方都可以使用
我们应该尽量避免使用全局变量,但是在非常少的一些场合你会需要用到它
返回语句 Return Statements
def isPositive(x):
return (x > 0)
print(isPositive(5))
# 结果为 True
一旦返回,函数立即结束!
Print versus Return
def cubed(x):
print(x**3) # 这里的操作不太合适
cubed(2) # 但是似乎看起来也正常运行了
8
print(cubed(3)) # 应该也能有效(但是返回 None,太怪了)
27
None
print(2*cubed(4)) # Error!
64
正确写法:
def cubed(x):
return (x**3) # 这样做更好
cubed(2) #似乎输出被忽略了,为什么?
8
print(cubed(3)) # 有效了!
27
print(2*cubed(4)) # 也是有效的!
128
函数组合 Function Composition
对于嵌套的函数而言,应该最先运行最内层的函数
def f(w):
return 10*w
def g(x, y):
return f(3*x) + y #在我们返回它之前,我们必须先执行 f(3*x)
def h(z):
return f(g(z, f(z+1))) # 最内部的 f(z+1) 必须先执行
print(h(1)) # 你一定得“亲眼看看”
# 结果为:500
Helper Functions
编写函数是用来解决问题的
我们还可以编写函数来存储那些经常被用到的一系列操作
这种函数就叫做 Helper Function
def onesDigit(n):
return n%10
def largerOnesDigit(x, y):
return max(onesDigit(x), onesDigit(y))
print(largerOnesDigit(134, 672))
print(largerOnesDigit(132, 674))
"""
结果为
4
4
"""
总结
-
变量只是个标签,物理设备上有啥才是重点
-
函数定义:
def
、header、body、缩进、return
-
函数是有作用域的,类似双层玻璃,里面可以看见外面,外面不能看见里面
-
Helper Function 有时候会很有用
-
一定要亲眼看你的代码是怎么跑起来的