python之函数

简介:

什么是函数?它有什么作用?

函数是一个整体,你可以把你经常用的代码定义成一个函数,当你去调用这个函数的时候,就相当于用了整个函数里面的代码,里面的代码就是封装代码。注意,函数是一个整体,所以里面的变量是局部变量,在外面是用不了的,比如说我在函数里面设置a=5,在函数外面我们就用不了这个变量a

定义方法及调用方法如下:

1
2
3
def  zhouyu():  #定义一个zhouyu的函数
     print ( "i am zhouyu" #zhouyu函数内的封装代码
zhouyu()  #调用zhouyu这个函数

执行结果

wKioL1m90U6jOd-CAAAdStJVpBI940.png


这个是没有参数的函数,一般情况下,函数里面可能有一些数是有变化的,这个数是就是参数,这个数可以由上面代码的结果,或者用户输入的值传到这个函数里面,代替这个参数让函数变得更可用。比如:

1
2
3
4
def  sum_2_nums(a,b):
     sum1  =  +  b
     print ( "%d + %d = %d" % (a,b,sum1))
sum_2_nums( 100 , 200 )

从上面的代码可以看出,我们定义了一个函数sum_2_nums,这个函数有两个参数,一个是a,一个是b,(注意:参数一般是写在函数的括号里面的)这两个参数就可以在封闭代码上应该了,如上面代码的第二行就可以知道a,b这两个参数被应用了,下面我们看第四行代码,可以看到这个函数被调用了,与之前调用的不同的是这个函数被调用的时候,还加上了两个数字,一个是100,一个是200,其实可以是这样的,我们调用这个函数的时候,代码就会去找有没有这个函数,如果有,就会执行这个函数,很显然,是有这个函数的,而且这个函数需要我们提供两个参数,一个为a,一个为b,那么我们在调用这个函数的时候,就得提供两个参数,如上代码,我们提供的参数就是100和200函数就会把a=100,b=200放入到这个函数代码中去执行,就会出现以下结果:

wKioL1m92BLDjy_gAAADfcwDbXo983.png

像上面的情况来说,a,b就是形参,而100,200就是实参,形参其实就是一个形象的参数,就是虚拟的,而实参就是实实在在的参数,比如100,200就是实际的参数。

如果你把上面代码的100,200换成别的,那a和b的值也会随着变化。

下面说return这个的作用

return就是把一个方法的执行结果返回出来,比如下面我们想获取sum1的结果,可以通过return获取

1
2
3
4
def  sum_function(a,b):
     sum1  =  +  b
     return  sum1
print (sum_function( 100 , 200 ))

如果你没有加入return sum1的话,你去执行这个代码,sum_function(100,200)这个方法的结果是空的,也就是None,就什么都没有打印出来,因为这个函数没有返回任何数据。当然,也有另外一种方法,就是把这个sum1定义成一个全局变量,可以通过以下代码:

1
2
3
4
5
def  new_sum(number):
     global  sum2
     sum2  =  number  +  3
new_sum( 50 )
print (sum2)

执行结果是

wKioL1m-HlqyOggsAABOBvP1gBY767.png

global其实就是声明一个全局变量,这样我们就可以在外面应这个变量啦

有同学可能会说,那我要它的返回值干嘛,请看下面,如果new_sum想要拿到上一个方法的结果来当成我这个方法的变量,怎么办,因为函数里面的变量是局部变量,在外面是获取不到的,所以我们通过返回值来获取我们想要的东西:

1
2
3
4
5
6
7
8
def  sum_function(a,b):
     sum1  =  +  b
     return  sum1
def  new_sum(number):
     sum2  =  number  +  3
     print (sum2)
=  sum_function( 100 , 200 )
new_sum(a)

当上面的代码执行到第7行代码的时候,就会去调用sum_function这个函数,并传入了两个数值,100和200.这时候就会去执行sum_function这个函数,因为这个函数里面有return,所以就会去return出来的值赋给了a,这样a就有值了,然后再把a的值赋给了new_sum这个函数

注意返回值可以多个,但是return只能有一个,因为方法在执行的时候,看到return它就不执行下面的代码,直接退出方法啦,那如果我们想返回多个值怎么办呢,返回值可以为任何类型,比如元组,字典,列表。这样的话,我们就可以把多个值放在字典或者元组或者列表里面

代码如下:

1
2
3
4
5
6
7
def  sum_function(a,b):
     sum1  =  +  b
     =  {a,b,sum1}
     return  d
=  sum_function( 100 , 200 )
print (a)
print ( type (a))

这样我们返回的就是一个set的数据类型

wKioL1m97t6SyTHVAABdh5CQfgw963.png

如果你想返回一个列表,可以用以下方法代码如下:

1
2
3
4
5
6
def  sum_function(a,b):
     sum1  =  +  b
     return  {a,b,sum1}
=  sum_function( 100 , 200 )
print (a)
print ( type (a))

wKiom1m97-OxhFqHAABOrUdqGgc884.png

字典也是同理

如果你默认返回多个值的话,方法会把它封装成一个元组如下代码:

1
2
3
4
def  sum_function(a,b):
     sum1  =  +  b
     return  a,b,sum1
print (sum_function( 100 , 200 ))

wKiom1m98ZfDq6IkAAA8BR5TGwc092.png

下面说一下函数的嵌套

下面代码是把把print_line函数嵌套在print_5_line函数上

1
2
3
4
5
6
7
8
def  print_line():
     print ( "-" * 50 )
def  print_5_line():
     =  1
     while  i < =  5 :
         print_line()
         =  +  1
print_5_line()

wKioL1m9_Y-AwvD4AABsErVGNm4474.png

上面的执行结果就可以说明函数是可以嵌套的。

下面说一下缺省参数,缺省参数就是参数有默认的值,如果你没有给这个参数值,这个参数就用它默认的值。如下代码中,zhouyu函数有两个形参a和b,也就是说我们去调用它的时候要传入两个参数,那为什么代码去调用zhouyu的时候只传入一个参数却没有报错呢,因为b=12是缺省参数,也就是说,如果只传入一个参数,那么b就会使用默认值也就是12,所以执行结果是sum = 13。

1
2
3
4
def  zhouyu(a,b = 12 ):
     sum1  =  +  b
     print ( "sum = %d"  % sum1)
zhouyu( 1 )

如果你调用zhouyu的时候传入两个参数,那b=12就不生效啦,如下:

1
2
3
4
def  zhouyu(a,b = 12 ):
     sum1  =  +  b
     print ( "sum = %d"  % sum1)
zhouyu( 1 , 22 )

执行结果是sum = 23

这里要注意一下,缺省参数只能放在最后,不能放在中间或者前面,如下面代码,一定会报错的:

1
2
3
4
def  zhouyu(a = 12 ,b):
     sum1  =  +  b
     print ( "sum = %d"  % sum1)
zhouyu( 1 , 22 )

如果你有三个参数呢最后两个是缺省参数,然后你只想让第三个参数不要用默认值,用你传入的值,怎么办呢,可以看看下面代码:

1
2
3
4
def  zhouyu(a,b = 12 ,c = 22 ):
     sum1  =  +  +  c
     print ( "sum = %d"  % sum1)
zhouyu( 1 ,c = 33 )

从上面代码可以看出b的默认值是12,c的默认值是22,那如果你想改变c的值而不改变b的值的话,你可以在传入参数的时候写上c=33,这样c就不会应用默认值22,而用33,像这种我们就称c=33是命名参数

这里我们是明确知道我们想要传入几个参数,那么,如果我们不知道自己想传入几个参数怎么办呢

1
2
3
4
5
def  long_argue(a,b, * argue):
     print (a)
     print (b)
     print (argue)
long_argue( 1 , 2 , 3 , 4 )

上面代码中,*argue是用来接收多余的参数的,我们可以看看执行结果

wKioL1m-TxSDXsaUAABeebFGZP4264.png

上面的代码中,把多余的3,4传入到argue这个参数里面,变成了一个元组,那么它有什么用呢,比如说,我们想让很多个值相加,可是不知道大概有多少个值,就可以通过这个来实现。如下代码:

1
2
3
4
5
def  long_argue(a,b, * argue):
     for  in  argue:
         sum1  =  sum1  +  i
     sum1  =  sum1  +  +  b
long_argue( 1 , 2 , 3 , 4 )

由上面的代码就可以知道,把多余的3,4传入给了argue,这样argue就是一个元组啦,如果要让他们想加的话,就得把元组里面的值一个一个的取出来,并让它们相加,然后再让结果去加上a,b这样就可以实现多个值相加啦。

下面还有一种,就是在*argue后面加上**kwargue这个参数,那么它又是什么意思呢,可以看看下面代码的解释:

1
2
3
4
5
6
def  long_argue(a,b, * argue, * * kwargue):
     print (a)
     print (b)
     print (argue)
     print (kwargue)
long_argue( 1 , 2 , 3 , 4 )

执行结果如下:

wKioL1m-UUOhrVuPAABj8j_fMx4115.png

上面可以知道,其实我们的*argue是用来接收一些数值或字符串的,并把这些数据变成元组,而**argue是用来接收命名参数(什么是命名参数可以看看上面红色字体部分,有相关的解释),并把这些命名参数变成字典。

如果我们有一个元组和一个字典,现在想把元组和字典都传递到函数中,应该怎么做呢,可以看看以下代码:

1
2
3
4
5
6
7
8
def  long_argue(a,b, * argue, * * kwargue):
     print (a)
     print (b)
     print (argue)
     print (kwargue)
=  ( 44 , 55 , 66 )
=  { 'name' : 'zhouyu' , 'age' : 22 }
long_argue( 11 , 22 , * A, * * B)

如果你不在第8行代码中,A和B前面加上*号的话,传入参数的时候就会默认把A和B看成一个整体,也就是字符串,然后把这两个字符串都传入到*argue这个参数里面去,就变成了元组的值。而上面代码就是把*A拆成一个个数字,也就是44,55,66的数值,然后传递给*argue,把B拆成"name"="zhouyu","age"=22,然后传入了B,像这种过程,我们称这为拆包


本文转自 周子琪 51CTO博客,原文链接:http://blog.51cto.com/izhouyu/1966099


相关文章
|
5天前
|
Python
python函数的参数学习
学习Python函数参数涉及五个方面:1) 位置参数按顺序传递,如`func(1, 2, 3)`;2) 关键字参数通过名称传值,如`func(a=1, b=2, c=3)`;3) 默认参数设定默认值,如`func(a, b, c=0)`;4) 可变参数用*和**接收任意数量的位置和关键字参数,如`func(1, 2, 3, a=4, b=5, c=6)`;5) 参数组合结合不同类型的参数,如`func(1, 2, 3, a=4, b=5, c=6)`。
10 1
|
1天前
|
Python
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
|
4天前
|
测试技术 开发者 Python
Python中的装饰器:优雅而强大的函数修饰工具
在Python编程中,装饰器是一种强大的工具,用于修改函数或方法的行为。本文将深入探讨Python中装饰器的概念、用法和实际应用,以及如何利用装饰器实现代码的优雅和高效。
|
9天前
|
Python
Python函数学习应用案例详解
学习Python函数的应用,包括计算两数之和、判断偶数、计算阶乘、生成斐波那契数列及反转字符串。示例代码展示了函数接收参数和返回结果的功能,如`add(a, b)`求和,`is_even(num)`判断偶数,`factorial(n)`计算阶乘,`fibonacci(n)`生成斐波那契数,以及`reverse_string(s)`反转字符串。
11 1
|
9天前
|
Python
python基础篇:什么是函数?函数有什么用?
python基础篇:什么是函数?函数有什么用?
23 3
|
13天前
|
安全 Python
Python中input()函数
【4月更文挑战第3天】,`input()` 是 Python 内建函数,用于从控制台获取用户输入。它会暂停程序并显示提示信息(如果提供),用户输入的内容被视为字符串返回。基本语法是 `variable = input(prompt)`,其中 `prompt` 是可选提示信息。例如,`name = input("请输入您的姓名:")` 后,程序会等待用户输入,然后将输入的字符串赋值给 `name`。注意 `input()` 总是返回字符串,需手动转换为其他类型,且避免使用 `eval()` 处理用户输入以防止安全风险。
21 2
Python中input()函数
|
14天前
|
Java C语言 C++
【Python】5. 基础语法(3) -- 函数篇
【Python】5. 基础语法(3) -- 函数篇
23 1
|
14天前
|
程序员 Python 容器
Python中的函数
【4月更文挑战第2天】,Python函数:代码复用的关键,通过`def`定义,接受参数,返回结果。内置如`len()`、`print()`,自定义函数满足特定需求。`lambda`用于快速小功能,参数多样,支持默认和可变。装饰器扩展功能,不改原代码。高阶函数处理其他函数。函数促进DRY原则,增强代码组织和可读性。
14 2
Python中的函数
|
19天前
|
Python
Python内置函数map、split、join讲解
Python内置函数map、split、join讲解
29 0
|
22天前
|
程序员 数据处理 开发者
【Python小技巧】通过实例说明推导式,条件表达式和Lambda函数
【Python小技巧】通过实例说明推导式,条件表达式和Lambda函数
23 2