【Python10】初学Python中的函数

本文详细介绍了Python中的函数,包括函数的概念、作用、创建与调用、参数使用、默认参数、不定长参数、匿名函数lambda以及返回值。通过实例讲解了如何创建和使用各种类型的函数,以及局部变量和全局变量的差异。

 

目录

1.函数的定义及作用

①函数的概念:

②函数的作用:

2.函数的创建及调用

①函数的创建:

②函数名的明明要求:

③空函数

④函数的调用

2.1.使用一个简单的函数绘制五角星

3.含单个参数的函数

3.1.在python中给函数设置一个参数

3.2.参数的类型 

4.使用函数绘制一个太阳花

5.含有多个参数的函数

5.1.含有多个参数的函数的设置

5.2.含有多个参数的函数的调用

6.默认参数

6.1.为什么要用默认参数

6.2.默认参数的使用

6.3.设置默认参数时,默认参数的位置要放在非默认参数后面 

7.不定长参数 

7.1.*args不定长位置参数

7.2.**args不定长关键字参数

8.使用关键字参数作为实参 

9.匿名函数 ——lambda

9.1.Python对lamdba函数的限制

10.返回值和return关键字

10.1.return的用法

10.2.return和print的区别

10.3.return关键字单独使用

11.局部变量和全局变量

11.1.局部变量不能在外部被访问

11.2.全局变量的值可以在函数内部被获取

11.3.在函数内部使用全局变量不会对全局变量进行修改

11.4.避免全局变量和局部变量名称相同

11.5.global关键字(在函数中使用全局变量)


1.函数的定义及作用

①函数的概念:

函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集

②函数的作用:

可以加强代码的复用性,提高程序编写的效率

2.函数的创建及调用

①函数的创建:

在python中,创建函数需要使用def关键字来定义它,后接函数名、参数列表、冒号,从第二行开始是函数体,函数体需要进行缩进,通常是4个英文空格。例如:

'''
def 函数名(参数列表):
	函数体
'''
def func():
	print('Hello,World!')

②函数名的明明要求:

a.函数名可以由字母、数字和下划线组成,但不能以数字作为开头

b.函数的名字尽量表达出函数的功能

③空函数

当我们创建函数时,如果没有想好怎么写函数体的代码,可以使用pass语句。pass是跳过的意思,它可以起到占位符的作用:

'''
def 函数名(参数列表):
	函数体
'''
def func():
	pass

④函数的调用

函数定义好了,需要进行调用。如果不调用它,则不会产生任何效果

'''
def 函数名(参数列表):
	函数体
'''
def func():
	print('Hello,World!')
func()

>>>Hello,World!

2.1.使用一个简单的函数绘制五角星

import turtle
def star():
	#绘制五角星
	for i in range(5):
		turtle.forward(100)
		turtle.left(144)
star() #调用函数
turtle.done() #阻止画图弹窗关闭

3.含单个参数的函数

3.1.在python中给函数设置一个参数

在python中,给函数设置参数非常简单,只需要在函数名后面的“()”中添加上参数,然后在函数体中使用参数即可。

python中设置的参数其实就相当于一个变量,然后直接在函数体中调用变量就可以了。

在python中,定义参数时,不用定义参数的数据类型。

设置参数时,参数时没有实际值的,我们称它为形参当调用的时候,会另外给它传一个实际的参数,这个参数才会在函数体中生效,我们称它为实参。

例如,我们给画五角星的函数设置一个参数:

import turtle
#绘制五角星,传一个五角星边长的参数
def star(x): #在这里的x称为形参
	for i in range(5):
		turtle.forward(x)
		turtle.left(144)
star(50) #在这里x称为实参
turtle.done() #阻止弹窗关闭

3.2.参数的类型 

参数的类型可以是:数值、字符串、布尔值、列表、字典、元组,甚至可以是另外一个函数等等

4.使用函数绘制一个太阳花

circle、setheading,都遵循 “ 顺时针 - 负,逆时针 + 正 ” 的原则

setheading是按照x正方向来旋转的

left 逆时针,right 顺时针

import turtle
turtle.speed(0)
#画花的函数
def flower(x,y):
	#把画笔下移,从地面开始画花
	turtle.penup()
	turtle.right(90)
	turtle.forward(200)
	turtle.pendown()
	turtle.right(180)
	#花茎
	turtle.pensize(8)
	turtle.pencolor("green")
	turtle.forward(100)
	#花叶
	#绘制花叶的步骤最好是在纸上画出,才好理解角度
	turtle.setheading(45)
	turtle.circle(-120,60)
	turtle.setheading(225)
	turtle.circle(-120,60)
	#setheading()用法和left()、right()不同的地方在于:
	#setheading每次执行时会自动把方向设置成x正轴方向,再进行旋转
    #而left和right是从当前位置来算的
	turtle.setheading(135)
	turtle.circle(120,60)
	turtle.setheading(-45)
	turtle.circle(120,60)
	#上半截花茎
	turtle.setheading(90)
	turtle.forward(200)
	#画太阳花
	turtle.pensize(1)
	turtle.pencolor('black')
	#填充颜色放在外面,颜色就不会覆盖花边
	#如果把填充颜色放在循环里面,颜色就会覆盖边,因为画一个就填充一个正方形
	turtle.fillcolor('yellow')
	turtle.begin_fill()
	for i in range(x):
		for j in range(4):
			turtle.forward(y)
			turtle.left(90)
		turtle.left(360/x)
	turtle.end_fill()
flower(20,35)
turtle.penup()
turtle.goto(-250,0)
turtle.pendown()
#由于画笔移动过去之后朝向是向上的
turtle.right(90)
flower(20,50)
turtle.done()

5.含有多个参数的函数

5.1.含有多个参数的函数的设置

在python中,给函数设置多个参数,可以直接把参数写入小括号里,参数之间用逗号隔开即可:

def function(args1,args2,args3,...):  #多个参数
    pass

5.2.含有多个参数的函数的调用

调用函数时,传入的实参的顺序和数量,要跟形参的顺序和数量一样:

def function(args1,args2,args3):
    pass
function(args1,args2,args3) #实参顺序需要和形参一样

6.默认参数

6.1.为什么要用默认参数

如果一个函数设置的参数过多,调用的时候就会很麻烦,所以函数给了一个叫做默认参数的机制。

默认参数指在定义函数的参数时,给参数赋一个值,来给函数的参数提供一个备选方案。这样,当我们调用函数时,如果忘了传入参数,函数就会使用默认参数进行执行。

6.2.默认参数的使用

例如我们写一个画多边形的代码:

import turtle
turtle.speed(0)
#我们把参数设置为边数
def polygon(sizes=3):
	for i in range(sizes):
		turtle.forward(50)
		turtle.left(360/sizes)
polygon()
turtle.hideturtle()
turtle.done()

如果这里不传参数,就会使用默认参数3,绘制出一个三角形:

如果我们这里传入参数8:

import turtle
turtle.speed(0)
def polygon(sizes=3):
	for i in range(sizes):
		turtle.forward(50)
		turtle.left(360/sizes)
polygon(8)
turtle.hideturtle()
turtle.done()

就会执行传入的参数8,绘制出一个8边行:

6.3.设置默认参数时,默认参数的位置要放在非默认参数后面 

import turtle
turtle.speed(0)
def polygon(color,fcolor,sizes=3): #默认参数要放在非默认参数的后面
	turtle.pencolor(color) #根据传入的参数选择颜色
	turtle.fillcolor(fcolor)
	turtle.begin_fill()
	for i in range(sizes):
		turtle.forward(50)
		turtle.left(360/sizes)
	turtle.end_fill()
polygon('green','orange',5) #调用参数,传入画笔颜色green,填充颜色orange
turtle.hideturtle()
turtle.done()

7.不定长参数 

在定义函数时,我们经常会遇到不确定参数个数的情况,这个时候,我们要使用不定长参数。

不定长参数有两种:

7.1.*args不定长位置参数

args是参数名字,在参数名字前面加一个“*”,表示不定长位置参数,它会把实参中多余的位置参数放入一个元组中:

def nsum(x,y=3,*a):
	sum=0
	for i in a:
		sum+=i
	print(x)
	print(y)
	print(a)
	print(sum)
nsum(1,2,3,4,5,6,7,8,9,0)

>>>1
2
(3, 4, 5, 6, 7, 8, 9, 0)
42

7.2.**args不定长关键字参数

传递实参时,既然会有位置参数,那么肯定可以有关键字参数。

args是任意参数名,在参数名前面加两个“*”,表示不定长关键字参数,它会把实参中多余的关键字参数放到一个字典中:

def nsum(x,y=3,*a,**b):
	print(x)
	print(y)
	print(a)
	print(b)
nsum(1,2,3,4,age=18,name='xzy')

>>>1
2
(3, 4)
{'age': 18, 'name': 'xzy'}

8.使用关键字参数作为实参 

当我们为函数设置多个参数时,调用的时候可能会经常因为传入错误的参数顺序而发生错误,这个时候,还有一个方法,就是使用关键字参数作为实参。

如果使用关键字参数,则可以改变传参的顺序:

def info(name,age,sex):
	print('姓名:'+name)
	print('年龄:'+str(age))
	print('性别:'+sex)
#传入正确顺序的参数
info('小明',34,'男')

>>>姓名:小明
年龄:34
性别:男
'''
#传入错误顺序的参数
info(18,'女','小红')
>>>TypeError: can only concatenate str (not "int") to str
#如果不出现str的错误,就会出现打印错误
>>>姓名:女
性别:小红
'''
#使用关键字参数作为实参
info(age=18,sex='女',name='小红')

>>>姓名:小红
年龄:18
性别:女

9.匿名函数 ——lambda

在编程时,有时候有一些函数只是临时一用,而且逻辑也很简单,就可以使用匿名函数,不必非要给它想个名字。

匿名函数是一种表达式,它的格式是以lambda作为声明,后面接参数,然后是一个冒号分隔开,冒号后面接表达式。

例如:lambda x,y:x+y  这就是一个x+y的表达式

lambda x,y : x if x >=y else y  这是一个判断的表达式,如果x>=y 则 x,否则 y

匿名函数没有函数名,调用的时候需要把它传给一个变量,然后直接调用这个变量,并在变量后面用括号携带上参数:

#lambda表达式需要一个变量名来保存以及传值
fun1=lambda x,y:x+y   #x+y
fun2=lambda x,y:x if x>=y else y #判断x,y的大小
print(fun1(1,2))
print(fun2(5,6))
#如果我们使用函数的方法来解决,代码就会复杂很多
def fun_1(x,y):
	print(x+y)
fun_1(1,2)
#fun2使用函数方法来定义,我们可以发现使用lambda只需要两行,代码简洁一些
def fun_2(x,y):
	if x>=y:
		print(x)
	else:
		print(y)
fun_2(5,6)

>>>3
6
3
6

9.1.Python对lamdba函数的限制

a.可以让代码看上去更简洁

b.只允许lambda函数包含一条表达式

c.lambda函数不能包含命令

d.只能是单行函数

所以在函数复杂的情况下,我们还是使用def定义,把每条语句写好备注,这样才符合:

Explicit is better than implicit(明了胜于晦涩)

10.返回值和return关键字

跟函数定义时可以拥有任意多个、任意类型的参数类似,return关键字后面可以跟任意多个、任意类型的返回值,并且以元组的形式存储。

函数的返回值是函数重要的组成部分。函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返回给程序再由程序做出进一步的操作。可以说是函数的返回值令函数与函数之间,函数与主程序之间更加紧密的联系起来。

10.1.return的用法

python的函数中都有的一个返回值,默认为None。也可以使用return value 语句来定义一个且只能定义一个任意类型的返回值。但是我们可以返回一个序列类型的对象,来实现返回多个值的效果。

#求一个列表数字相加之和,并用返回值的形式
def sum1(a):
	sum=0
	for i in a:
		sum+=i
	return sum
print(sum1([1,2,3,4,5]))

>>>15

10.2.return和print的区别

return结束函数并返回一个返回值,而print仅仅是打印输出。

10.3.return关键字单独使用

除了返回特定的值,还可以单独使用以结束函数的运行

有点类似break关键字:

def f():
	print('a')
	return
	print('b')
f()

>>>a

11.局部变量和全局变量

在函数内被定义的:局部变量

在主函数定义的:全局变量

11.1.局部变量不能在外部被访问

在函数内部定义的变量称为局部变量,它只能在该函数内使用,在函数运行之前或者完成运行之后是没有被定义的、也就是不存在的。

def text(x,y):
	t=1
	sum=x+y+t
	print(sum)
print(t)#局部变量在外部是访问不了的
>>>NameError: name 't' is not defined

text(1,2)
>>>4

11.2.全局变量的值可以在函数内部被获取

def text():
	print(num)
num=1 #这是一个全局变量
text()

>>>1

11.3.在函数内部使用全局变量不会对全局变量进行修改

def text():
	num=0
	print(num)
num=1
text()
print(num)

>>>0
1

11.4.避免全局变量和局部变量名称相同

如果在函数内、外定义了同名变量,虽然它们的名称一样,但却是两个完全不同的变量;建议避免这种全局变量和局部变量用同一个名称的命名方法,这样很容易让代码变得混乱难懂。

def text():
	a='皮皮虾'
	return a 
a='派大星'
print('调用前a:'+a)
print('调用中a:'+text())
print('调用后a:'+a)

>>>调用前a:派大星
调用中a:皮皮虾
调用后a:派大星

11.5.global关键字(在函数中使用全局变量)

当在函数中使用了global关键字定义的变量时,此变量就当作全局变量来使用了

def sum(x,y):
	#全局变量放在函数中修改,就可以改变这个全局变量
	global total
	total=x+y
	print('调用中total=',total)
total =100
print('调用前total=',total)
sum(1,2)
print('调用后total=',total)

>>>调用前total= 100
调用中total= 3
调用后total= 3

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值