python基础总结3——函数

超、凢脫俗 2022-04-04 09:27 269阅读 0赞

代码请参考我的github:

https://github.com/masterzz/python-learn

一、函数

1,函数的格式

python的函数定义是很简单的,如下即可:

def 函数名(参数):

函数代码(函数要执行的代码)

而调用函数,各个语言大同小异: 函数名(参数)

如果要给函数加入文档说明:

def add(a,b):

“传入两个参数,返回相加值”

return a+b;

print(add(3,2))

这时会有文档说明:

help(add)

Help on function add in module __main__:

add(a, b)

传入两个参数,返回相加值

2,全局变量和局部变量

函数内的变量就是局部变量咯,和java中一样。

当时对于python 而言它的全局变量就像java中的static的变量一样,可以在函数中直接调用:

num=100

def printNum():

print(num)

printNum()

结果:

100

但是如果直接在函数中改全局变量会报错:

UnboundLocalError: local variable ‘num’ referenced before assignment

那为什么还要定义全局变量,改都改不了!加上global就可以修改了(这保证了数据的安全性):

num=100

def printNum():

global num

print(num)

num+=2

printNum()

print(num)

运行结果:

100

102

3,python返回多个变量

python中还有一个特性比较有意思,就是可以返回多个变量,但是呢这个多个变量其实也不算多个变量,其实呢就是将这些变量封装成一个元组:

def test1(a,b):

print(a)

print(b)

return a,b

print(test1(b=11,a=22))

输出结果:

22

11

(22, 11)

4,缺省参数

def printinfo( name, age = 35 ):

# 打印任何传⼊的字符串

print “Name: “, name

print “Age “, age

printinfo(‘zhangsan’)

简单说就是不传age时,它会默认age=35;但是这个缺省的参数要写到最后

运行结果:

Name: zhangsan

Age 35

当有多个缺省参数时,这种写法就会有用了:

printinfo(‘zhangsan’,age=22)

可以跳过没有的缺省参数

当做函数的写法来看,python要比java灵活,这里会省事一些。当然java也做了一系列优化,像装包、解包,以及函数式编程,但是灵活性上还是弱于动态语言。

5,不定长参数

python还有一个很有意思的东东,那就是不定长参数,先来take a look:

def fun(a,b,*args, **kwargs):

print(‘a= ‘ , a)

print(‘b= ‘ , b)

print(‘args= ‘ , args)

print(‘kwargs= ‘ , kwargs)

如上是定义,下面来看参数部分:

fun(22,33,44,55,66)

这样的输出结果:

a= 22

b= 33

args= (44, 55, 66)

kwargs= {}

换一个参数列表:

fun(22,33,44,55,d=22)

运行结果:

a= 22

b= 33

args= (44, 55)

kwargs= {‘d’: 22}

所以上面的*args, **kwargs分表表示将不定长的数值或者字典分别放到这两个参数中来咯。

下面来看一个有意思的参数列表:

A=[3,4,5,6]

B={‘c’:’cc’,’d’:’dd’}

fun(22,33,44,55,*A,**B)

这时会输出什么呢?没错,A和B的内容都会放到args中!

a= 22

b= 33

args= (44, 55, [3, 4, 5, 6], {‘c’: ‘cc’, ‘d’: ‘dd’})

kwargs= {}

这里我们进行一个处理:

fun(22,33,44,55,*A,**B)

a= 22

b= 33

args= (44, 55, 3, 4, 5, 6)

kwargs= {‘c’: ‘cc’, ‘d’: ‘dd’}

是不是很熟悉?没错,这就是解包,在js中喜欢用[..]来接收解包的参数,java印象中也有这个功能。python中也很有意思,*能够解列表之类的包,**解的是字典的包,如果用*解字典的包,可以试试,智能取到key。另外再说明一点,函数中的args和kwargs名字是可以改的!

7,匿名函数

说到匿名函数,这个东东,真的是在哪个语言里都是很好用的,java中写多线程,Python的函数式编程,以及js的回调函数,都是匿名函数。

所谓匿名函数就是没有名字的函数咯,python贼实诚,用了lambda关键词来创建匿名函数。

基本格式:

lambda [arg1 [,arg2,…..argn]]:expression

实例:

sum = lambda arg1, arg2: arg1 + arg2

sum = lambda arg1, arg2: arg1 + arg2

sum(1,2)

3

这样就可以了,是不是很方便?

有个地方很有意思,java中的函数式编程的接口就叫lambda,这个lambda是希腊字母的第 11个字,是不是很熟悉,印象中有一个lambda的算式。

实际上lambda适合比较简单的函数,尤其是那种一层一层的嵌套调用,贼好用。

来一个例子:

def test(x,y,aaa):

return aaa(x,y);

test(22,33,lambda x,y : x+y)

55

这种办法就是把lambda表达式当作参数来传递。还有就是给字典排序,可以用到:

stus.sort(key = lambda x:x[‘name’])

倒序:

stus.sort(key = lambda x:x[‘name’], reverse=True)

发表评论

表情:
评论列表 (有 0 条评论,269人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python3基础语法总结

    Python是一种面向对象的解释型计算机程序设计语言,Python的定位是“优雅”、“明确”、“简单”。在此记录一下自己刚学python时,一些基础语法的使用。假设读者有c语言

    相关 python3 高阶函数基础

    高阶函数的定义: `既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数` -----------------