一、函数
如果在一个程序中,有些代码我需要重复的使用,比如隔一段代码打印五遍“you are good”
1.函数的概述【方法】
1.1 认识函数
函数:在一个完整的项目中,某些功能会反复的使用,那么会将功能会反复的使用,那么会将功能封装成函数,当我们要使用此功能的时候调用即可。
优点:
1.简化代码结构,增加了代码的复用性(重复使用的程度)
2.增加代码的可维护性,如果想修改某个BUG,只需要对应的函数即可。
1.2 定义函数
格式:
def 函数名(参数列表):
语句
return 表达式
解释:
def : 函数代码块以def关键字开始
函数名:遵循标识符规则
参数列表:任何传入函数的参数和变量,必须放在小括号之间,使用逗号分隔,函数从函数的调用者那里获取信息【调用者给函数传递的信息】
():是参数列表的开始以及结束
冒号:函数内容【封装的功能】以冒号开始,并且缩进
语句:函数封装的功能
return:一般用于结束函数,并且返回信息给函数的调用者
表达式:要返回给函数调用者的信息
注意:最后的return表达式可以不写,若不写的情况下默认return None
参数列表 = 参数1,参数2,…,参数n
1.3函数的调用
语法: 函数名(参数列表)
函数名:是要使用的功能的函数的函数名字
参数列表:函数的调用者给函数传递的信息
函数调用的本质:实参给形参赋值的过程
>>> int(1.3)
1
>>> abs(-10)
10
1.4 最简单的函数
说明:最简单的函数,无参数,无返回值的函数
#定义函数
def myPrint():
print("you are a good man")
#调用函数
myPrint()
#输出的结果为:
you are a good man
1.5 函数的参数
参数列表:如果函数所实现的需求中涉及到未知项参与运算,就可以将未知项设置为参数。
格式:参数1,参数2,参数3,…
形式参数:在方法中定义的,用于接收中间参数的值
实际参数:在函数外面定义,实际参与运算的值,就是为了给形式参数赋值
#函数的定义
#name是形参
def myPrint(name):
print("%s is a good man !"%name)
#"lili" 是实参
myPrint("lili")
#输出的结果为:
lili is a good man !
#形参 参数一:name 参数二:age
def myPrint(name, age):
print("%s is %d year old"%(name, age))
#函数调用,传递两个参数
myPrint("lili", 18)
#输出的结果为:
lili is 18 year old
1.6函数的返回值
函数的返回值表示一个函数执行完成之后得到的结果
使用return返回函数的返回值,用于结束函数,得到最终运算的结果。
需求:编写函数实现功能,给函数传递两个整数,获取这两个整数的之和
def add(num1, num2):
sum = num1 + num2
#将结果返回函数的调用者
return sum
#注意:return的作用是结束整个函数,因此return后面的语句不会被执行
print("hello")
#调用函数
res = add(10, 20)
print(res)
#输出的结果为:
30
1.7 参数传递
参数传递的本质:实参给形参赋值的过程
1.7.1 位置参数之值传递
值传递指传递不可变类型,一般指string(字符串型)、tuple(元组)和number(数字类型)类型
def func1(a):
print(a)
a = 10
print(a)
temp = 20
#将temp作为实参传递给func1函数,将赋值给形参a
#相当于 a = temp
func1(temp)
print(temp)
#输出的结果应为:
20
10
20
打印地址,如下
def func1(a):
print(id(a))
a = 10
print(id(a))
temp = 20
#将temp作为实参传递给func1函数,将赋值给形参a
#相当于 a = temp
print(id(temp))
func1(temp)
print(id(temp))
#输出的结果为:
8791349814512
8791349814512
8791349814192
8791349814512
经过上面的代码大家应该可以理解“参数传递的本质是实参给形参赋值的过程”这句话的含义了吧,如果有点迷迷糊糊的,我就来大概讲一下,我们都知道,在python中的赋值就是地址传递的过程,第一个地址就是指向了“20”这个数值的地址,然后把temp赋给了函数func1(a),这个时候,a=temp=20,所以输出的地址和temp的一样,函数继续运行,把“10”赋给了a,这个时候就把a的地址指向了10,所以这个地址才不同,跳出这个函数后,这个时候的temp的地址还是指向“20”的,赋值不改变原先的值的,所以就会出现一个地址和另三个地址不同的原因,我也不懂说没说清楚…
1.7.2 位置参数之引用传递
引用传递一般传递的是可变类型,一般指list(列表),dict(字典)和set(集合)
def func1(c):
c[0] = 100
d =[1, 2, 3, 4]
#将引用传递过去
func1(d)
print("输出的结果为:%d"%d[0])
输出的结果为:100
解释:调用func1(d)时,相当于把d=[1,2,3,4]这个列表传给了函数func1,所以,函数里面的c[0] = 100,相对于是d[0]=100的赋值的过程
说明:引用传递的本质上还是值传递,只不过传递的是地址
位置参数又称必选参数
1.7.3 关键字参数
概念:用于函数调用时,通过“键-值”的形式加以指定,可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求
def func(name, age):
print("I am %s, and I am %d year old"%(name, age))
#一般调用
func("lili", 18)
#使用关键字参数
func(age = 18, name = "lili")
#输出的结果为:
I am lili, and I am 18 year old
I am lili, and I am 18 year old
注意:有位置参数时,位置参数必须在关键字参数的前面,但是关键字参数之间是不存在先后顺序的。
1.7.4 默认参数
概念:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值。
调用函数时,如果没有传递参数则会使用默认参数
def func(name, age=18):
print("I am %s, and I am %d year old"%(name, age))
#一般的函数调用
func('lilei', 19)
#关键字参数调用
func(name = 'leilei')
#使用默认参数调用
func('lili')
#输出的结果为
I am lilei, and I am 19 year old
I am leilei, and I am 18 year old
I am lili, and I am 18 year old
使用默认参数可以简化函数的调用。
使用默认参数的时候需注意:
1.必选参数在前,默认参数在后,否则python解释器会报错
2.默认参数必须指向不变对象
如何设置默认参数
当函数有多个参数时,把变化大的参数放在前面,变化小的放在后面,变化小的可以作为默认参数。
好了,本次对python函数的一些简单、不成熟的介绍就到这里了,本人也在学习python中,等我对python的函数的使用又更多的了解和理解后在来考虑一下后续的更新的问题吧!
这个是本人的一篇博客,写得有误、不好的地方请谅解
理解万岁!