1、定义与调用
内置函数:python这个语言跟我们之前定义好的,拿过来直接用就好
例如:print()
round(1.13432,3) 四舍五入保留小数点后3位
函数可以解决代码的封装性,避免重复代码,函数都有一定的功能
自定义函数:根据自己的需要定义的函数,尽量不要跟内置函数名字相同(要实在用,可以将首字母大写,以便于区分)
格式
def funcname(params):
pass
1、定义一个打印hello world字符串的方法
def Print():
print('hello world')
Print()
2、定义一个打印指定字符串的方法
(最后一行是调用函数)
利用变量赋值,定义一个变量ms
def Print(s):
print(s)
ms = 'hello1'
Print(ms)
也可以函数中直接写要输出的字符
def Print(s):
print(s)
Print('hello')
3、定义一个计算加法的函数 a + b
(不打印的话没有结果输出)
def Add(a, b):
# 没有return相当于return None
return a + b
c = Add(1, 3)
print(c)
也可以使用变量
def Add(a, b):
result = a + b
return result
c = Add(1, 3)
print(c)
相乘
def Mul(a, b):
return a * b
s = Mul(2, 3)
print(s)
函数必须有参数和返回值,要是没有返回值说明返回的是None
return后面的代码是不会被执行的
def Print(s):
print(s)
return
print(s)
print(s)
print(s)
ms = 'hello ccc'
Print(ms)
2、返回值和序列解包
定义一个函数,既能计算a+b,还能计算a-b
def Add_sub(a, b):
sum = a + b
sub = a - b
return sum, sub
c = Add_sub(4,1)
print(c)
打印类型
def Add_sub(a, b):
sum = a + b
sub = a - b
return sum, sub
c = Add_sub(4,1)
print(type(c))
print(c)
print(c[0], c[1])
另一种调用方法(为了更加清楚演示才用sum,以后起变量名不要跟内置函数名冲突,可能会有bug)
def Add_sub(a, b):
sum = a + b
sub = a - b
return sum, sub
sum, sub = Add_sub(4, 1)
print(sum, sub)
自动归类为元组
d = 1, 2, 3
print(d)
要想使用序列解包的赋值方式的话,值里面的元素个数和变量里面的元素个数一定要是一一对应的
链式赋值:多个变量赋值同一个值
a = b = c = 1
3、参数
形参和实参,就是形式参数和实际参数
例如下面代码,a和b就是形参,1和3就是实参
(1和3是必要参数,都要传)
def Add(a, b):
result = a + b
return result
c = Add(1, 3)
print(c)
可以看看a和b打印出来的数值
3和1传入顺序与定义顺序必须是相对应的
def Add(a, b):
result = a + b
print("a=", a)
print("b=", b)
return result
c = Add(1, 3)
print(c)
关键字参数:用关键字来指定传递参数,顺序不依赖定义的顺序
比如把1传给b,3传给a
c = Add(b=3,a=1)
默认参数 可以在定义参数的时候直接给一个默认值
(如下直接给b默认值2)
def Add(a, b=2):
result = a + b
print("a=", a)
print("b=", b)
return result
c = Add(3)
print(c)
例如:简单打印一个公司人物信息
def print_userinfo(name, gender, age, depart):
print("我是"+name)
print("我是"+gender+"生")
print("我今年"+str(age)+"岁")
print("我在"+depart+"工作")
print_userinfo('小华', '男', 23, '长春一汽')
也可以默认关键字参数
def print_userinfo(name, gender='男', age=23, depart='中国一汽'):
print_userinfo('小李',age=30)
也可以改变参数位置
(depart可以放在age前面)
print_userinfo('小红', depart='百度', age=20)
注意:
调用的时候要先传必要参数,比如小红要比age先传,也就是不能把小红放到age后面
没有默认值的参数放在有默认值参数的前面
可变参数
一个*表示是一个序列类型的可变参数
(for是遍历它)
def test(*value):
for v in value:
print(v)
test('hello','world','python')
列表和元组都会被认为一个参数
def test(*value):
for v in value:
print(v)
s = ('hello', 'python', 'world')
test(s)
**代表的是一个字典类型的可变参数
例如:模拟一个服务员给客人点菜的场景
(可变参数一定要放第一位)
def print_food(*food, placeno, waiter):
print("这是第"+placeno+"桌客人的点菜单")
for f in food:
print(f)
print("服务员:" + waiter)
print_food('宫保鸡丁', '水煮肉片', placeno='12', waiter='小王')
最开始出现了错误,因为代码这样写,
错误提示:只能用关键字调用的参数,计算机认为这4个字符串都是可变参数*food
所以应该用关键字
print_food('宫保鸡丁', '水煮肉片', '12', '小王')
sep 分隔符
print("a"+" b")
print('a', 'b')
print('a', 'b', sep=',')
end 结尾,默认换行符,用end可以自己设定结尾,若用空格键,下一行打印的c会跟在这一行后面
print('a', 'b', sep='|', end='')
print('c')
4、变量的作用域
局部变量与全局变量
函数体内部的a是局部变量,外边的a是全局变量
a = 'abc'
def test():
a = 'def'
print('函数内部的a', a)
print('调用前的a:', a)
test()
print('调用后的a:', a)
global
改变后a已经是外面的a了
a = 'abc'
def test():
global a
a = 'def'
print('函数内部的a', a)
print('调用前的a:', a)
test()
print('调用后的a:', a)