关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回

python的函数

发布时间:2022-09-11 23:37:38

1.什么是函数?

有两个变量 x 和 y ,当 x 取其变化范围中的每一个特定值时,相应地有唯一的 y 与它对应,则称 y 是 x 的函数。记为 y = f ( x ),其中 x 为自变量, y 为因变量。

可知函数由三部分组成:

x:输入,一般函数可以有多个输入。
f:function,通过某种特定的方法将x转换为y,function就是这个方法。
y:输出,一般函数只有一个输出,计算机技术中的函数也可以没有输出。

<p id="div-border-left-red">python的函数:由若干个语句块(function)、函数名称、参数列表(输入)构成,完成一个功能(输出)。</p>

2.函数的定义及调用

1.函数的定义

python使用def语句定义函数

def 函数名(参数列表):
    函数体(代码块)
    [return 返回值]

函数名:一般命名要求。
参数列表:放一个标志符占位,叫做<font color=#DC143C >形参</font>。
函数体:代码块,决定函数的参数。
return:默认都会使用return语句,若无默认返回None。

2.函数的调用

通过前面定义的函数名称进行调用,就可以将函数运行起来,从而得到函数的返回值。
注意:
调用的时候需要在函数名称后加个小括号()括号内填入函数体中需要的参数,传入的参数叫做<font color=#DC143C >实参</font>。
函数传入的参数必须和函数体中需要的函数(实参)保持数量一致,除非原函数参数列表中定义的有默认参数。

#定义函数add()
def add(x,y):
    sum = x+y
    return sum

#调用函数add()
add(1,3)
4

3.函数的参数

python传入的参数分为两类,一种说根据位置传入的参数叫位置参数,另外一种可以根据形参定义的变量传入的参数叫关键字参数。
传入的时候,位置参数需放在关键字参数之前。

1.普通位置参数

把参数1给x,参数3给y。一一对应,这种就是位置参数。位置参数是按照顺序一一传入。

def add(x,y):
    sum = x+y
    return sum

add(1,3)  
4
2.可变位置参数

在普通位置前面加个"*",可以一次接受多个参数。使用一个元组(tuple)收集多个实参。

def add(*nums):
    sum = 0
    print(type(nums))
    for x in nums:
        sum+=x
    print(sum)

add(3,5,6)
<class 'tuple'>
14

<div class="note danger no-icon"><p>说明:一般情况下,如果普通参数和可变位置参数一起定时候,需要把普通参数放在位置参数之前。</p></div>

def add(x,*nums):
    sum = 0
    print(nums)
    for x in nums:
        sum+=x
    print(sum)

add(3,5,6)
(5, 6)
11
3.关键字参数

把3传给y,1传给x。按照定义好的关键字传入参数,位置可以随意。

def add(x,y):
    sum = x+y
    return sum

add(y=3,x=1) 
4

<div class="note danger no-icon"><p>说明:当位置参数和关键字参数一起传入时候,需要把位置参数放在关键字参数前面。</p></div>

def add(x,y):
    sum = x+y
    return sum

add(1,y=1) 
2
4.可变关键字参数

在普通关键字参数前面加两个"**",可以一次接受多个关键字参数,收集到的实参名称和值组成一个字典(dict)。

def showconfig(**kwargs):
    for k,v in kwargs.items():
        print('{} = {}'.format(k, v))

showconfig(host='127.0.0.1',port='8080',username='mykernel',password='qwe123')
username = mykernel
password = qwe123
port = 8080
host = 127.0.0.1

<div class="note danger no-icon"><p>说明:当可变参数和普通参数一起定义时,需要把可变参数放在普通参数之后。</p></div>

def showconfig(x,y,*args,**kwargs):
        print(x)
        print(y)
        print(args)
        print(kwargs)

showconfig('127.0.0.1',8080,'mykernel',password='qwe123')
#此时使用关键字参数给x,y赋值就会报错。
127.0.0.1
8080
('mykernel',)
{'password': 'qwe123'}
5.默认参数

有些参数很少改变,所以可以在指定形参的时候传入一个默认值,当有新的实参去替换它的时候,新的参数生效。
默认参数必须放在普通参数之后

#传入默认值参数
def add(x=11,y=111):
    sum = x+y
    return sum

add() #未传入参数,默认参数生效
122
#有再次传入参数,替换默认值。
def add(x=11,y=111):
    sum = x+y
    return sum

add(657,y=123) #新传入的参数生效
780

定义一个函数login,参数名称为host、port、username和password。

def login(host='127.0.0.1',port='80',username='mykernel',password='123'):
    print('{}:{}\nname:{}\npasswd:{}\n'.format(host,port,username,password))

login()
login('192.168.1.1',8080)
login('10.0.0.1',password='qwe123')
127.0.0.1:80
name:mykernel
passwd:123

192.168.1.1:8080
name:mykernel
passwd:123

10.0.0.1:80
name:mykernel
passwd:qwe123
6.keyword-only参数(python3后引入)

定义方法一:在可变位置参数后,出现普通参数。此时这个普通参数就被python视作为keyword-only参数,keyword-only参数在传入时必须使用关键字传参方法传入。

定义方法二:def fn(*, x,y),*,后跟普通参数,也被视为keyword-only参数,x,y均为keyword-only参数。

7.参数定义顺序

<div class="note danger no-icon"><p>参数列表的一般顺序是:普通参数,缺省参数,可变位置参数,keyword-only参数(可带缺省值),可变关键字参数。</p></div>

def fn1(x, y, z=3, *args, m=4, n, **kwargs):
    print(x,y)
    print(z)
    print(args)
    print(m,n)
    print(kwargs)
    print(end='\n')

#x,y是普通参数
#z,带默认值,传入时候省略,缺省参数
#*args,可变位置参数
#m=4,keyword-only 缺省参数
#n,keyword-only参数
#**kwargs,可变关键字参数

fn1(1,2,n=4)

fn1(1,2,4,43,123,k=123,m=11,n=13,j='hello')
1 2
3
()
4 4
{}

1 2
4
(43, 123)
11 13
{'j': 'hello', 'k': 123}
def fn2(x, y, z=3, *, m=4, n, **kwargs):  #定义m,n为keyword-only参数。
    print(x,y)
    print(z)
    print(m,n)
    print(kwargs)
    print(end='\n')

fn2(1,2,m=1,n=2)
1 2
3
1 2
{}
8.参数解构
def add(x,y):
    print(x+y)
    print()

add(*(4,6)) #参数解构
# add(*(1,2)) add(*[1,2]) add(*{1,3}) 

add(**{'x':1,'y':11}) #字典参数解构,x,y参数要和定义的对应起来。把x=1,y=11 传入形参,关键字传参。
d = {'a':1,'b':12}

add(*d.keys()) #取k 把取出来的k赋值给形参,位置传参。
add(*d.values()) #取values
10

12

ab

13

推广博客来了:http://hexo.mykernel.cn/python-function-1.html

另外有需要云服务器可以了解下风纳云fengnayun.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


/template/Home/Dawn/PC/Static

选择风纳云,也许是您成就一番大事业的开端

注册账号