8.Python函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法:
def 函数名(参数列表): 
    函数体
#定义函数对象
def fn():
	print("This is a function")
	print("Hello World")
	print("我是一个函数")
fn() #调用函数
print(fn)
print(type(fn))

#定义一个函数,可以用来求任意两个数的和
def sum():
	a=100
	b=200
	print(a+b)
sum()

#定义函数时指定形参
def sum(a,b):
	return a+b
print(sum(500,200))

输出:
This is a function
Hello World
我是一个函数
<function fn at 0x0000000000E0D1E0>
<class 'function'>
300
700
[Finished in 0.1s]

定义一个函数,定义形参时,可以为形参指定默认值,指定了默认值以后,如果用户传递了参数则默认值没有任何作用
如果用户没有传递,则默认值就会生效

#传参方式:位置参数
def sum(a=10,b=30,c=80):
	return a+b+c
print(sum())
print(sum(1,2))

#传参方式:关键字参数
def sum(a,b,c):
	print("a=",a)
	print("b=",b)
	print("c=",c)
	return a+b+c
print(sum(a=10,c=60,b=20))

#传参方式:混合传参
def sum(a,b,c=20):
	print("a=",a)
	print("b=",b)
	print("c=",c)
	return a+b+c
sum(1,2)

输出:
120
83
[Finished in 0.1s]

a= 10
b= 20
c= 60
90
[Finished in 0.1s]

a= 1
b= 2
c= 20
[Finished in 0.1s]

实参的传递方式

1.位置参数,位置参数就是将对应位置的实参复制给对应位置的形参

2.关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数

3.位置参数和关键字参数可以混合使用,混合使用关键字和位置参数时,必须将位置参数写到前面

不定长的参数函数

#在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参
#它将会将所有的实参保存到一个元组中
def sum(*nums):
	result = 0;
	for n in nums:
		result+=n
	return result
print(sum(1,2,3,4,45,5,6))

# *a会接受所有的位置实参,并且会将这些实参统一保存到一个元组中(装包)
def fn(*a):
	print("a=",a,type(a))
	result = 0
	for i in a:
		result += i
	return result
print(fn(1,2,3,4,5,6,7))

# 带星号的形参只能有一个
# 带星号的参数,可以和其他参数配合使用
# 第一个参数给a,第二个参数给b,剩下的都保存到c的元组中
def fn1(a,b,*c):
	print("a=",a)
	print("b=",b)
	print("c=",c)
fn1(1,2,3,4,5,6,7)

print("-"*30)

# 可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递
# 第一个参数给a,剩下的位置参数给b的元组,c必须使用关键字参数
def fn2(a,*b,c):
	print("a=",a)
	print("b=",b)
	print("c=",c)
#fn2(1,2,3,4,5,6,7)#TypeError: fn2() missing 1 required keyword-only argument: 'c'
fn2(1,2,3,4,5,6,c=7)

print("-"*30)

#所有的位置参数都给a,b和c必须使用关键字参数
def fn3(*a,b,c):
	print("a=",a)
	print("b=",b)
	print("c=",c)
#fn3(1,2,3,4,5,6,7)#TypeError: fn3() missing 2 required keyword-only arguments: 'b' and 'c'
fn3(1,2,3,4,5,b=6,c=7)

print("-"*30)

# 如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递
def fn4(*,a,b,c):
	print("a=",a)
	print("b=",b)
	print("c=",c)
#fn4(1,2,3,4,5,6,7)#TypeError: fn4() takes 0 positional arguments but 7 were given
fn4(a=5,b=6,c=7)

print("-"*30)

# *形参只能接收位置参数,而不能接收关键字参数
def fn5(*a):
	print("a=",a)
#fn5(a=10)#TypeError: fn5() got an unexpected keyword argument 'a'
fn5(1,2,3,4)

print("-"*30)

# **形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中
#   字典的key就是参数的名字,字典的value就是参数的值
# **形参只能有一个,并且必须写在所有参数的最后
def fn6(a,b,**c):
	print("a=",a)
	print("b=",b)
	print("c=",c)
#fn6(1,2,3,4,5,6)#SyntaxError: invalid syntax
fn6(c=1,b=2,d=3,e=4,a=9)

print("-"*30)

# 传递实参时,也可以在序列类型的参数前添加星号,这样他会自动将序列中的元素依次作为参数传递
# 这里要求序列中元素的个数必须和形参的个数的一致
# fn4(*t)  
def fn7(a,b,c):
	print("a=",a)
	print("b=",b)
	print("c=",c)
d=[1,2,3]
fn7(*d)
print("-"*30)
d={1,2,3}
fn7(*d)
print("-"*30)
d=(1,2,3)
fn7(*d)
print("-"*30)
d={"name":"zhangsan","age":12,"sex":"man"}
fn7(*d)

输出:
66
a= (1, 2, 3, 4, 5, 6, 7) <class 'tuple'>
28
a= 1
b= 2
c= (3, 4, 5, 6, 7)
------------------------------
a= 1
b= (2, 3, 4, 5, 6)
c= 7
------------------------------
a= (1, 2, 3, 4, 5)
b= 6
c= 7
------------------------------
a= 5
b= 6
c= 7
------------------------------
a= (1, 2, 3, 4)
------------------------------
a= 9
b= 2
c= {'e': 4, 'd': 3, 'c': 1}
------------------------------
a= 1
b= 2
c= 3
------------------------------
a= 1
b= 2
c= 3
------------------------------
a= 1
b= 2
c= 3
------------------------------
a= age
b= sex
c= name
[Finished in 0.2s]

文档字符串

# help()是Python中的内置函数
# 通过help()函数可以查询python中的函数的用法
# 语法:help(函数对象)
# help(print) # 获取print()函数的使用说明
#help(print)

# 文档字符串(doc str)
# 在定义函数时,可以在函数内部编写文档字符串,文档字符串就是函数的说明
#   当我们编写了文档字符串时,就可以通过help()函数来查看函数的说明
#   文档字符串非常简单,其实直接在函数的第一行写一个字符串就是文档字符串
def fn(a:int,b:bool,c:str='Hello World'):
	'''
	这是一个文档字符串的示例
	函数的作用:。。。
	函数的参数:
		a:int类型,作用:。。。
		b:bool类型,作用:。。。
		c:string类型,作用:。。。
	'''
	return 10
help(fn)

输出:
Help on function fn in module __main__:

fn(a:int, b:bool, c:str='Hello World')
    这是一个文档字符串的示例
    函数的作用:。。。
    函数的参数:
            a:int类型,作用:。。。
            b:bool类型,作用:。。。
            c:string类型,作用:。。。

[Finished in 0.2s]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值