一.流程控制语句
1.判断语句
if语句
if 表达式:
语句块
if...else语句
if 表达式1:
语句块1
else 表达式2:
语句块2
if...elif...else语句(选择语句)
if 表达式1:
语句块1
elif 表达式2:
语句块2
elif 表达式3:
语句块3
....
else:
语句块n
if嵌套语句
if 表达式1:
if 表达式2:
语句块2
else:
语句块3
2.循环语句
while循环
while 条件表达式:
循环体
for 循环
for 迭代变量 in 对象:
循环体
循环嵌套
while 条件表达式1:
while 条件表达2:
循环体2
循环体1
for 迭代变量1 in 对象1:
for 迭代变量2 in 对象2:
循环体2
循环体1
while 条件表达式:
for 迭代变量 in 对象:
循环体2
循环体1
3.break和continue语句
break用于跳出当前循环
while 条件表达式1:
执行代码
if 条件表达式2:
break #跳出while
for 迭代变量 in 对象:
if 条件表达式:
break #跳出for
continue用于跳出当前循环一次
while 条件表达式1:
执行代码
if 条件表达式2:
continue
for 迭代变量 in 对象:
if 条件表达式:
continue
4.pass语句
pass语句起到占位的作用
for i in range(1,10):
if i%2 = 0:
print(i)
else:
pass
二.函数
1.创建和调用
使用关键字def来创建函数
#创建
def fun_name([参数]):
['''函数注释''']
函数主体
#调用 :函数名()
fun_name([参数])
2.参数那点事
(1)形参和实参
形参是在定义函数时,起到占位的参数
实参是在调用函数时,实际传入到函数体内,参与运算的值。
(2)传入参数的方式
位置参数
位置参数也称为,必备参数,在调用的时候实参传入的顺序,必须和形参的顺序一致。传入实参数量也必须和形参一样。
#定义
def fun(a,b):
print('a等于',a)
print('b等于',b)
print('a+b等于',a+b)
fun(1,2) #按照形参的顺序传入,a=1,b=2
'''
输出
a等于 1
b等于 2
a+b等于 3
'''
关键字参数
关键字参数是指使用形参的名字来指定值,不需要顺序一致,参数名正确即可。
#定义
def fun(a,b):
print('a等于',a)
print('b等于',b)
print('a+b等于',a+b)
#调用
fun(b=6,a=9) #和形参的顺序可以不一样
'''
输出
a等于 9
b等于 6
a+b等于 15
'''
默认参数
在调用函数的时候,如果没有按照形参传入指定的参数,就会报错,这时,我们可以为函数的参数设置默认的值,当没有参数传入时,默认参数就会传入函数体内,有参数传入的时候,默认参数不会影响程序的输出结果。
注意:
默认参数必须是不可变的数据类型。
demo1
def demo(a=[]): #形参a的默认值为 空列表,是可变的
print(a)
a.append(1) #在列表末尾添加1
demo() #第一次调用列表a,输出 []
demo() #第二次调用列表a,输出 [1]
demo() #第三次调用列表a,输出 [1, 1]
#默认参数是可变的,会影响程序的最种输出结果
demo2
def demo(num=10):
print(num)
num = 1
demo() #不传入参数,输出为默认值10
demo(999) #输出 999
demo(888) #输出 888
demo(777) #输出 777
(3)可变参数
可变参数也叫不定长参数,即传入函数的参数可以是多个。
*parameter形式
该形式接受所有传入的参数,以元组的形式保存。
def print_coffe(*coffe_name):
print(coffe_name)
for i in coffe_name:
print(i)
print_coffe('蓝山','卡布奇诺','雀巢')
'''
输出
('蓝山', '卡布奇诺', '雀巢')
蓝山
卡布奇诺
雀巢
'''
#如果要传入已经存在的列表或者元组,在列表或元组名字前面加*
coffe_name = ['蓝山', '卡布奇诺', '雀巢']
def print_coffe(*coffe_name):
print(coffe_name)
for i in coffe_name:
print(i)
print_coffe(*coffe_name) #输出的结果是一样的
两个*parameter形式
两个*表示接受任意多个类似关键字参数一样显示赋值的实际参数,直白一点就是通过键值对(字典)的方式。
def fun (**demo):
print()
for key, vlaue in demo.items():
print("["+ key + "]的年龄是" + vlaue)
fun(熊大='3岁',熊二='2岁') #前面的键不带引号
'''
输出
[熊大]的年龄是3岁
[熊二]的年龄是2岁
'''
#如果要传入已经存在的字典,则在字典前面加**
3.返回值
return
通过return返回想要得到的值,return出现在函数的任何位置,只要得到运行,后面的代码块都会结束执行。
可以返回一个值或者多个值,中间用逗号隔开,如果返回的是多个值,则保存在元组里面。
def fun (num1=1,num2=2):
print('==============')
return num1,num2
print('我在return后面,所以我不会被执行')
num = fun()
print(num)
"""
输出
==============
(1, 2)
"""
4.变量的作用域
局部变量
只在函数内部起作用,函数体执行完毕,就不存在了。
def fun():
num = 1
print(num)
fun() #输出1
print(num) #会报错 NameError: name 'num' is not defined
全局变量
作用于函数体内外
num = 1
def fun():
print('函数体内'+ str(num))
fun()
print('函数体外'+ str(num))
'''
输出
函数体内1
函数体外1
'''
注:
当局部变量与全局变量重名时,对函数体内的变量进行操作,并不会影响与之重名的全局变量。
str_1 = '我是全局变量'
def fun():
str_1= '我是局部变量'
print(str_1)
fun()
print(str_1)
'''
我是局部变量
我是全局变量
'''
作用域链
当局部变量与全局变量重名时,函数调用的是靠近该代码块的变量(函数内部的变量更靠近)
str_1 = '我是全局变量'
def fun():
str_1= '我是局部变量'
print(str_1)
fun() #输出 :我是局部变量
关键字global
如果在函数体内定义变量时,使用关键字global,该变量也就会变成全局变量,在函数体外也可以访问该变量。
def fun():
global str_1
str_1= '我是通过关键字global在函数内部定义的全局变量'
print(str_1)
fun() #在函数体内输出: 我是通过关键字global在函数内部定义的全局变量
print(str_1) #在函数体外输出 : 我是通过关键字global在函数内部定义的全局变量
也可以通过关键字global更改原有的全局变量
str='old_str'
def fun():
global str
str = 'new_str' #替换原来的orl_str
fun()
print(str) #输出 new_str
5.匿名函数
使用关键字lamba来定义,匿名函数是没有名字的函数,可以理解为把函数体赋值给一个变量,而不需要添加retrun就可以返回值给变量。
语法
fun_name = lambda [arg1[,arg2[...,argn]]]:expression
# arg : 是可选参数,用于指定要传递的参数列表
# expression : 必选参数,匿名函数主体
demo
#定义
sum = lambda num1,num2:num1+num2
#调用
print(sum(1,2))
#等价于
def fun(num1,num2):
return num1+num2
print(fun(1,2))
#同样的都输出3
注:
在实现一些简单的逻辑运算的时候,使用匿名函数可以简化代码
匿名函数在调用的时候和普通的函数的时候是一样的。