- if-elif-else
- for
- while
函数
函数定义
空函数 pass
返回多个值
可变参数 *
关键字参数 **
控制语句
if - elif - else
比如, 输入用户年龄, 根据年龄打印不同的内容, 在 Python 程序中, 用 if 语句实现:
- age = 20
- if age>= 18:
- print('your age is', age)
- print('adult')
根据 Python 的缩进规则, 如果 if 语句判断是 True, 就把缩进的两行 print 语句执行了, 否则, 什么也不做.
也可以给 if 添加一个 else 语句, 意思是, 如果 if 判断是 False, 不要执行 if 的内容, 去把 else 执行了:
- age = 3
- if age>= 18:
- print('your age is', age)
- print('adult')
- else:
- print('your age is', age)
- print('teenager')
注意不要少写了冒号:.
当然上面的判断是很粗略的, 完全可以用 elif 做更细致的判断:
- age = 3
- if age>= 18:
- print('adult')
- elif age>= 6:
- print('teenager')
- else:
- print('kid')
elif 是 else if 的缩写, 完全可以有多个 elif, 所以 if 语句的完整形式就是:
if < 条件判断 1>:
< 执行 1>
elif < 条件判断 2>:
< 执行 2>
elif < 条件判断 3>:
< 执行 3>
else:
< 执行 4>
if 语句执行有个特点, 它是从上往下判断, 如果在某个判断上是 True, 把该判断对应的语句执行后, 就忽略掉剩下的 elif 和 else, 所以, 请测试并解释为什么下面的程序打印的是 teenager:
- age = 20
- if age>= 6:
- print('teenager')
- elif age>= 18:
- print('adult')
- else:
- print('kid')
if 判断条件还可以简写, 比如写:
- if x:
- print('True')
只要 x 是非零数值, 非空字符串, 非空 list 等, 就判断为 True, 否则为 False.
循环
Python 的循环有两种, 一种是 for...in 循环, 依次把 list 或 tuple 中的每个元素迭代出来, 看例子:
- names = ['Michael', 'Bob', 'Tracy']
- for name in names:
- print(name)
执行这段代码, 会依次打印 names 的每一个元素:
Michael Bob Tracy
所以 for x in ... 循环就是把每个元素代入变量 x, 然后执行缩进块的语句.
第二种循环是 while 循环, 只要条件满足, 就不断循环, 条件不满足时退出循环. 比如我们要计算 100 以内所有奇数之和, 可以用 while 循环实现:
- sum = 0
- n = 99
- while n> 0:
- sum = sum + n
- n = n - 2
- print(sum)
在循环内部变量 n 不断自减, 直到变为 - 1 时, 不再满足 while 条件, 循环退出.
函数
函数定义
在 Python 中, 定义一个函数要使用 def 语句, 依次写出函数名, 括号, 括号中的参数和冒号:, 然后, 在缩进块中编写函数体, 函数的返回值用 return 语句返回.
空函数 pass
如果想定义一个什么事也不做的空函数, 可以用 pass 语句:
def nop(): pass
pass 语句什么都不做, 那有什么用? 实际上 pass 可以用来作为占位符, 比如现在还没想好怎么写函数的代码, 就可以先放一个 pass, 让代码能运行起来.
pass 还可以用在其他语句里, 比如:
- if age>= 18:
- pass
缺少了 pass, 代码运行就会有语法错误.
返回多个值
函数可以返回多个值吗? 答案是肯定的.
比如在游戏中经常需要从一个点移动到另一个点, 给出坐标, 位移和角度, 就可以计算出新的新的坐标:
- import math
- def move(x, y, step, angle=0):
- nx = x + step * math.cos(angle)
- ny = y - step * math.sin(angle)
- return nx, ny
- >>> x, y = move(100, 100, 60, math.pi / 6)
- >>> print(x, y)
- 151.96152422706632 70.0
但其实这只是一种假象, Python 函数返回的仍然是单一值:
- >>> r = move(100, 100, 60, math.pi / 6)
- >>> print(r)
- (151.96152422706632, 70.0)
原 大专栏 https://www.dazhuanlan.com/ Python - 控制语句及函数来返回值是一个 tuple! 但是, 在语法上, 返回一个 tuple 可以省略括号, 而多个变量可以同时接收一个 tuple, 按位置赋给对应的值, 所以, Python 的函数返回多值其实就是返回一个 tuple, 但写起来更方便.
默认参数
- def power(x, n=2):
- s = 1
- while n> 0:
- n = n - 1
- s = s * x
- return s
则, 我们调用 power(5), 相当于调用 power(5, 2).
- >>> power(5)
- 25
- >>> power(5, 2)
- 25
设置默认参数时, 有几点要注意:
一是必选参数在前, 默认参数在后, 否则 Python 的解释器会报错 (思考一下为什么默认参数不能放在必选参数前面)
二是如何设置默认参数.
当函数有多个参数时, 把变化大的参数放前面, 变化小的参数放后面. 变化小的参数就可以作为默认参数.
?
可变参数 *
要定义出这个函数, 我们必须确定输入的参数. 由于参数个数不确定, 我们首先想到可以把 a,b,c...... 作为一个 list 或 tuple 传进来, 这样, 函数可以定义如下:
- def calc(numbers):
- sum = 0
- for n in numbers:
- sum = sum + n * n
- return sum
但是调用的时候, 需要先组装出一个 list 或 tuple:
- >>> calc([1, 2, 3])
- 14
- >>> calc((1, 3, 5, 7))
- 84
如果利用可变参数, 调用函数的方式可以简化成这样:
- >>> calc(1, 2, 3)
- 14
- >>> calc(1, 3, 5, 7) // 区别少了 [] ()
- 84
所以, 我们把函数的参数改为可变参数:
- def calc(*numbers): // 函数定义修改为 *numbers
- sum = 0
- for n in numbers:
- sum = sum + n * n
- return sum
定义可变参数和定义一个 list 或 tuple 参数相比, 仅仅在参数前面加了一个 * 号. 在函数内部, 参数 numbers 接收到的是一个 tuple, 因此, 函数代码完全不变. 但是, 调用该函数时, 可以传入任意个参数, 包括 0 个参数:
- >>> calc(1, 2)
- 5
- >>> calc()
- 0
如果已经有一个 list 或者 tuple, 要调用一个可变参数怎么办? 可以这样做:
- >>> nums = [1, 2, 3]
- >>> calc(nums[0], nums[1], nums[2])
- 14
这种写法当然是可行的, 问题是太繁琐, 所以 Python 允许你在 list 或 tuple 前面加一个 * 号, 把 list 或 tuple 的元素变成可变参数传进去:
- >>> nums = [1, 2, 3]
- >>> calc(*nums)
- 14
*nums 表示把 nums 这个 list 的所有元素作为可变参数传进去. 这种写法相当有用, 而且很常见.
关键字参数 **
可变参数允许你传入 0 个或任意个参数, 这些可变参数在函数调用时自动组装为一个 tuple. 而关键字参数允许你传入 0 个或任意个含参数名的参数, 这些关键字参数在函数内部自动组装为一个 dict. 请看示例:
- def person(name, age, **kw):
- print('name:', name, 'age:', age, 'other:', kw)
函数 person 除了必选参数 name 和 age 外, 还接受关键字参数 kw. 在调用该函数时, 可以只传入必选参数:
- >>> person('Michael', 30)
- name: Michael age: 30 other: {
- }
也可以传入任意个数的关键字参数:
- >>> person('Bob', 35, city='Beijing')
- name: Bob age: 35 other: {
- 'city': 'Beijing'
- }
- >>> person('Adam', 45, gender='M', job='Engineer')
- name: Adam age: 45 other: {
- 'gender': 'M', 'job': 'Engineer'
- }
应用:
- def test(name, age, **kw):
- print("name :" , name, "age =", age ,"other", kw)
- for k in kw:
- #print(k, "=", kw[k])
- if k == 'addr':
- print("addr =", kw[k])
- elif k == 'phone':
- print("phone =", kw[k])
- if __name__ == '__main__':
- test('lg', 12, addr='jn', phone='110')
- >>phone = 110
- >>addr = jn
或者:
- def person(name, age, **kw):
- if 'city' in kw:
- # 有 city 参数
- pass
- if 'job' in kw:
- # 有 job 参数
- pass
- print('name:', name, 'age:', age, 'other:', kw)
来源: http://www.bubuko.com/infodetail-3364777.html