python函数学习笔记

1,函数名赋值给变量

def func(x):
    return x

f=func      #把函数名赋值给变量

print(f(1)) #用变量调用这个函数

再来个PHP的

<?php
function func($x){

 echo $x;
}

$f='func';
$f(1);
?>

效果一样

2,函数多个默认参数的设置

def func(x,y='y',z='z'):
    return x+y+z

print(func('a',z='c')) #跳过y参数直接设置z参数,输出ayc

php 的

function func($x,$y='y',$z='z'){

 echo $x.$y.$z;
}

func('a',$z='c');
//输出acz 而不是想要的ayc,证明php参数必须顺序对应,即使func('a',$b='b',$c='c')这样,依旧按照顺序输出:abc,这点php解释器做的不怎么样,差评

3,python 函数返回多个值,这点php是做不到的,php 只能返回一个

def func(name,age=19):

    return name,age


print(func('lianf'))
#输出('lianf', 19),其实是tuple 类型的一个不可变列表

可变的参数

def func(name,*km):

    return name,km


print(func('lianf',1,2,3,4,6))
#输出('lianf', (1, 2, 3, 4, 6)),可变的部分是一个tuple,可以用for x in km 循环出来如下:
def func(name,*km):

    s=name+":"
    for x in km:
        s=s+x
    return s


print(func('lianf',"a","b","c"))
#输出 lianf:abc,灵活,牛逼,慢慢喜欢上了这个语言

4,关键字(key)参数,这个也很牛逼,可以传不定长的字典dic也就是java 里的map (key-values )键值对作为参数

def func(name,**km):

    return name,km


print(func('liangf',a=1,b="bb"))
#输出('liangf', {'a': 1, 'b': 'bb'}),注意{} 注意这个大括号牛逼!!!

命名关键字参数

def func(name,*,b,c):


    return name,b,c


print(func('lianf',b=1,c='a'))
#输出('lianf', 1, 'a')

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

def func(name,age=18,*a,b,c,**k):


    return name,age,a,b,c,k


print(func('lianf',1,2,3,b=1,c='a',n='n',m='m'))
#输出:('lianf', 1, (2, 3), 1, 'a', {'n': 'n', 'm': 'm'})

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。
以及调用函数时如何传入可变参数和关键字参数的语法:

可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过args传入:func((1, 2, 3));

关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过kw传入:func({‘a’: 1, ‘b’: 2})。

使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。

定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章