Python学习_6

这一章我们开始说函数

函数

Python中定义函数的关键词是def,比如我们写一个Max(a,b)函数,用于返回两个数的较大的数。

def Max(a, b):
	if a > b:
		return a
	else:
		return b

# 调用
a = int(input())
b = int(input())
print(Max(a, b))

函数的意义

和循环一样,为了解决重复的劳动和大量重复的代码,函数应运而生。
在这里插入图片描述

参数的类型

上面这个函数中,a和b都是必选参数,就是调用的时候不可缺少的参数,如果调用的时候写成Max(a)或者Max(a, b, c)…等等参数不是两个整形参数时,就会报错。

函数中不仅仅只有必选参数,还有默认参数、可变参数、关键字参数等等。上面的代码就是关键参数。下面我们来看看其他参数

# 可变参数
# 1.默认参数要放在所有必选参数的后面
# 2.默认参数必须指向不变对象
def plus(a, b=2):	
	return a+b
# 调用
a = int(input())	# 假设输入1
print(plus(a))	# 输出结果为3


# 可变参数(很多时候定义函数不确定函数应含多少参数)
# 在参数前面加一个*,就变成了可变参数,可变参数接收到的值是一个tuple。
def plus(*numbers):
	add = 0
	for i in numbers:
		add += i
	return add
# 调用
print(plus(1, 2, 3, 6))	#输出12
print(plus(1, 2))	# 输出3


# 关键字参数
# 关键字函数类似于可变函数
# 关键字参数允许传入任意含参数名的参数,这些关键字参数在函数调用时自动组装为一个dict
def plus(**kw):
	return kw
# 调用
print(plus())
print(plus(x=1,y=1))
print(zm=100, wzw=90, zk=60, yz=80)
# 输出的都是字典

在这里插入图片描述
这里输入的1,是第一段代码的输入。其他都可以对应着看了。

当然,看到这里还是看不出关键字参数怎么应用,这里给出个例子

def plus(x, y, z):
	return x+y+z
dict_1 = {'x':100, 'y':90, 'z':80}	# keys的名字要与定义函数时的参数名一致
print(plus(**dict_1))

在这里插入图片描述
当然,这些参数还可以混杂在一起使用

def plus(x,y,z=0,*args,**kw):
    print('x=', x)
    print('y=', y)
    print('z=', z)
    print('args=', args)
    print('kw=', kw)

plus(1,2)
print()
plus(1,2,3,4,5,6)
print()
plus(1,2,3,4,5,k=1,m=1)

通过这几个调用,我们可以知道必选参数是必须要给值的,其他类型参数都可以不给值
在这里插入图片描述
当然,变量的话,还分局部变量和全局变量。这个概念学编程的人都应该非常清楚。

当变量处于被定义的函数内时,就是局部变量,只能在这个函数内被访问;当变量处于被定义的函数外时,就是全局变量,可以在程序中的任何位置被访问。

python中局部变量想定义成全局变量的关键词是global,这里就不给出代码了,可以自己试一试
在这里插入图片描述

函数的返回值

在上面的函数例子中,大多都含return,最后一个代码没有return。这里的return是返回值,下面用代码体验一下

# 用return的
def plus_1(a, b):
	return a+b
print(plus_1(1, 2))

# 不用return的
def plus_2(a, b):
	print(a+b)
plus_2(1, 2)

两段代码实现的功能是一样的,一个是有return的,一个是没有return的,这个看个人的习惯了,自己觉得各有优缺点吧。
在这里插入图片描述
return返回的值必须是一个,如果是多个,它会以元组的形式返回比如

def a():
	return 1,'ad'
print(a())

在这里插入图片描述
再来,return不光能返回数值,还能返回函数。

def system(t, *numbers):
	def plus():
		add = 0
		for i in numbers:
			add += i
		return add
	def cheng():
		temp = 1
		for i in numbers:
			temp *= i
		return temp
	if t == 1:
		return plus()
	else:
		return cheng()

print(system(1, 2, 2, 3))
print(system(0, 2, 2, 3))

返回函数会让这段代码中的求和函数和累乘函数,根据输出的一个数值的不同而去执行不同函数。在这里plus()函数和cheng()函数我们称为 闭包 (内部函数)。
在这里插入图片描述

函数使用范围(同样适用于变量)

在Java中有private,public,protected的一些限制关键词,Python中用_符号来解决了这一问题。

Python中正常写的函数就默认是public;首尾用双下划线(我也不知道叫啥,我就叫_是下划线了)来命名的函数__XXX__(),是特殊变量,允许直接用,但会被用作特殊用途,我们自己编程一般不会用这种变量名;首部有单或双下划线的函数和变量是非公开的,不应该直接引用。_XXX()是protected(单下划线),__XXX()是private(双下划线)

加粗了不应该,是因为Python中没有一种可以真正完全限制访问private函数或变量,但良好的编程习惯是不直接引用private函数或变量的,因为private函数可以隐藏内部逻辑,使函数有更好的封装性,这个学过Java的人应该会了解到,Python同样是面对对象的语言,许多地方与Java是类似的。

我们把上段代码修改一下

def _plus(*numbers):
	add = 0
	for i in numbers:
		add += i
	return add
def _cheng(*numbers):
	temp = 1
	for i in numbers:
		temp *= i
	return temp
def system(t, *numbers):
	if t == 1:
		return _plus(*numbers)
	else:
		return _cheng(*numbers)

print(system(1, 2, 2, 3))
print(system(0, 2, 2, 3))

得出的结果虽然是一样的,但是这段程序块公开了函数system,而_plus()和_cheng()都会被隐藏起来,只知道system()函数调用了_plus()和_cheng()两个函数,而细节实现就会隐藏起来,是一个十分常用的代码封装方法。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值