本节知识点:(1)函数定义格式;(2)五种参数使用
函数定义
基本语法格式
def function_name( parameter_list ):
return values
函数通常为小写英语单词及其组合,以下划线隔开,例如:sum、mean、cost_calculate
埋个坑,记得用pass
def function_name( parameter_list ):
pass没有 return values 的时候,返回值为None
很多教材喜欢写 参数是可变的、不可边的怎么怎么考虑!其实这么啥子必要。
在Python中所有的变量均是reference,理解这一点,就都ok了
参考之前的推文:Pyhon中的赋值与参数传递,或许跟你想的不太一样!
函数的简单介绍可以通过, """ 简单的测试函数 """ 这样子实现
def func():
""" 简单的测试函数 """
pass
func.__doc__' 简单的测试函数 '
函数参数
从左至右位置排序:位置参数、默认参数、可变参数、命名关键字参数、关键字参数
位置参数
代码示例、
def power(x,n):
return x**n
print( power( 10,2) )
print( power( 10,3) )
100
1000
比较简单,没啥子好说的,就是注意一哈调用的时候需要一个一个对上号就行
假如怕自己对不上号,就辛苦点,这么调用
print( power(x= 9,n=3) )
729
或者
print( power(9,n=3) )
729
但是不要这样子写
print( power(n=3,9) )
File "", line 1
print( power(n=3,9) )
^
SyntaxError: positional argument follows keyword argument原因就不多说了,SyntaxError已经给出解释,SyntaxError: positional argument follows keyword argument
这样子写也不对
print( power(3,x=9) )
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
----> 1 print( power(3,x=9) )
TypeError: power() got multiple values for argument 'x'原因就不多说了,TypeError已经给出解释,TypeError: power() got multiple values for argument 'x'
默认参数
用途:简化调用。出于这个目的,设置默认参数基本原则:
- 位置参数设置在前,默认参数设置在后
- 函数有多个参数,变化大的参数放置在前,变化小的参数放置在后面位置,同时为变化小的参数设置默认值
代码示例、
def power(x,n=2):
return x**n
print( power(10) )
print( power(5,3) )
100
125
def enroll_func(name, gender, money=60, city='Beijing'):
print( "name:{};gender:{};money:{};city:{}".format( name, gender, money ,city ) )
enroll_func("xiaole", "male" )
enroll_func("Frank", "male", money=1000, city="shanghai" )
name:xiaole;gender:male;money:60;city:Beijing
name:Frank;gender:male;money:1000;city:shanghai
可变参数
用途:解决传入参数个数不定的情况,
代码示例、
def simulate_sum( *args ):
result = 0
print( "args: {} ; 数据类型:{}".format( args, type(args) ) )
for arg in args:
result+=arg
return result
result = simulate_sum( 1,2,3,4,5 )
print( result )
args: (1, 2, 3, 4, 5) ; 数据类型:'tuple'>
15
result = simulate_sum( )
print( result )
args: () ; 数据类型:'tuple'>
0
传多了就是一个大的tuple,传少了就是一个小的tuple,不传就是个空tuple
关键字参数
用途:允许传入0个或者多个包含参数名字的参数,这样这些个参数就可以组成一个dict,从dict取参数相较于从tuple取参数,舒服!!
代码示例
def person_info(name,gender, **kwargs):
print( "主要信息:name {},gender {}".format( name, gender ) )
print( "其他信息:")
for key,value in kwargs.items():
print( "{} ---> {}".format( key,value ) )
person_info( 'Bob', 'female', city='Beijing',age=18, height = 168 )
主要信息:name Bob,gender female
其他信息:
city ---> Beijing
age ---> 18
height ---> 168
命名关键字参数
用途:指定关键字的名字
def sorted(__iterable: Iterable[_T],
*,
key: Optional[(_T) -> Any] = ...,
reverse: bool = ...) -> List[_T]
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order.
此处的key和reverse都是命名关键字参数,说白了,我就只允许你这来关键字来了,其他的我不要,不要
sorted( [-1,4,2,3], reverse=True)
[4, 3, 2, -1]
sorted( [-1,4,2,3], reverse1=True)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
----> 1 sorted( [-1,4,2,3], reverse1=True)
TypeError: 'reverse1' is an invalid keyword argument for sort()
参数组合
所有的参数都能组合使用,但是位置得定好,从左到右依次是:位置参数、默认参数、可变参数、命名关键字参数、关键字参数
常用的几种格式
格式1、只要位置参数
def func(x, y):
pass
格式2、位置参数+默认参数
def func(x, y,m=1,n=2):
pass
格式3、*args + **kwargs
def func(*args, **kwargs):
pass
格式4、位置参数+ 命名关键字参数
def func(x, *,reverse, order ):
pass
格式5、位置参数+ 命名关键字参数
def func(x, *,reverse =False , order = 1 ):
pass
References
[1] Runnoob https://www.runoob.com/python3/python3-function.html
Motto
日拱一卒,功不唐捐