文章目录(Table of Contents)
函数
我们经常在同一个程序中多次复用相同的代码, 函数可以很好的帮助我们完成这一点. 这一篇我们就会来介绍函数的定义.
在具体说明之前, 放一些其他教程的链接:
函数的定义
使用关键字def
来定义一个函数
我们来看一个简单的函数的例子
- #下面这个函数接受一个字符串和一个字母作为参数,返回这个字符串中有这个字母的个数
- def char_count(str,char):
- return str.count(char)
- # 函数的调用
- char_count('hello world','o')
- >> 2
参数的传递
函数中参数顺序是定义时指定的,如果不按照顺序传入参数,必须使用参数名进行传参
def animal_feature(animal,feature):
print(animal,'can',feature)
animal_feature('eagle','fly')#按顺序输入参数
>> eagle can fly
animal_feature(feature='fly',animal='eagle') #不按顺序输入参数
>> eagle can fly
默认参数值
函数的参数可以有默认的默认值,也就是说如果我们没有给指定参数变量任何值则会赋其默认值
- def animal_feature(animal,feature='fly'):
- print(animal,'can',feature)
- animal_feature('eagle')
- >> eagle can fly
- 默认参数后面不能再有普通参数,比如
f(a,b=10,c)
就是错误的,应该写成f(a,c,b=90)
参数的类型
在python中, 我们也是可以定义函数中参数的数据类型, 和返回值的类型的, 我们只需要将数据类型使用冒号加在变量名的后面即可, 类似下面的代码:
- def sum(a: int, b: int) -> int:
- return a+b
- if __name__ == "__main__":
- print(sum(1,2))
可变长的参数
可变参数的使用方法就是在参数列表前加*
比如我们要传入一些数字,返回这些数字的和, 可以看下面的例子:
- def num_total(*list1):
- num = 0
- for i in list1:
- num = num+i
- return num
- num_total(1,2,3,4,5)
- >> 15
- num_total(1) #这里输入的参数个数是可变的
- >> 1
除了前面的这种方式,我们还可以通过在前面增加两个*的方式来保存为字典参数,这时调用函数的方法则需要采用 arg1=value1,arg2=value2
这样的形式,我们可以看一下下面的例子:
- def PrintNum(*args,**kwargs):
- print('args:{}'.format(args))
- print('kwargs:{}'.format(kwargs))
- PrintNum(*[1,2,3],x=1,y=2)
- >> args:(1, 2, 3)
- >> kwargs:{'x': 1, 'y': 2}
更多的例子(关于传入实参的时候,加上*号,可以将列表中的元素拆成一个个的元素)
关于更多内容,参考这个链接:Python 优雅的使用参数 - 可变参数(*args & **kwargs)
函数中修改参数值
首先我们说明一下函数传值和函数传引用
函数传值
函数参数传值的意思是函数调用过程中,在函数内部使用到的参数只是一个局部变量,在函数执行结束后就销毁了。不影响调用该函数的外部参数变量的值。
函数传引用
函数参数传引用的意思是传递给函数的参数就是外部使用的参数,函数执行过程中对该参数进行的任何修改都会保留,当函数调用结束后,这个参数被其他代码使用中都是函数修改过后的数据。
在python中,参数是没有类型的,可以传递任何类型的对象作为参数,但是不同类型的参数在函数中的修改,表现也是不一样的。
- 不可变对象 : 数值、字符串、元组等
- 可变对象 : 列表、字典等
num = 1
list1 = [1]
def change_data(num,list1):
num*2
list1.extend([2,3])
num #num的值没有改变,因为num是不可变类型
>> 1
list1 #list1的值发生改变,因为list1是列表,是可变对象
>> [1,2,3]
变量的作用域
关于变量的作用域不准备讲了,与c语言里类似,差不多就是除非是全局变量(global),否则函数里变量改变不影响函数外面变量的值
可以看一下下面这个例子,与上面函数修改参数值进行类比
num = 1
list1 = [1]
def change_data(num,list1):
num = 2 #这里num是函数内部的局部变量
list1 = [1,2,3]#这里list1是函数内部的局部变量,所以list1改变不改变外部变量的值
num
>> 1
list1
>> [1]
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论