Python 函数相关

网址:http://www.cnblogs.com/wilber2013/p/4638967.html

Python中的函数也是一种对象,而且函数还是一等公民。函数能作为参数,也能作为返回值,这使得Python中的函数变得很灵活。想想前面两篇中介绍的通过内嵌函数实现的装饰器和闭包。

下面就介绍一下Python函数相关的一些内容。

可变长度参数

 

在编程的过程中,可能会遇到函数参数个数不固定的情况,这时就需要使用可变长度的函数参数。在Python函数定义中,使用*和**符号分别指定元组(非关键字)和字典(关键字)作为参数。

非关键字变长参数(元组)

当函数被调用的时候,所有的参数都将值赋给了在函数声明中对应的局部变量,剩下的非关键字参数按照顺序添加到一个元组中便于访问。

可变长元组参数必须在位置和默认参数之后,所以使用可变长元组参数的函数形式一般如下(中括号表示可选参数),可变长元组参数前有一个”*”符号:

deffuncName([fromal_args,] *tuple_grp_nonkw_args):
pass

看一个例子:

defargFunc(positional_arg,keyword_arg="foo", *tuple_grp_nonkw_args):
print"positional_arg:",positional_arg
print"keyword_arg:",keyword_arg
forarg intuple_grp_nonkw_args:
print"additional_arg:",arg
argFunc(3)
print
argFunc(3,4)
print
argFunc(3,4,"hello","world")

代码的输出为:

关键字变长参数(字典)

 

除了上面的方式,Python还可以支持关键字变长参数,额外的关键字参数被放入了一个字典进行使用。

可变长字典参数必须是函数定义中的最后一个参数,所以使用可变长字典参数的函数形式一般如下(中括号表示可选参数),可变长字典参数前有一个”**”符号:

deffuncName([fromal_args,][*tuple_grp_nonkw_args,] **dict_grp_kw_args):
pass

看一个例子:

defargFunc(positional_arg,keyword_arg="foo", *tuple_grp_nonkw_args, **dict_grp_kw_args):
print"positional_arg:",positional_arg
print"keyword_arg:",keyword_arg
forarg intuple_grp_nonkw_args:
print"additional non-keyword arg:",arg
forargKey indict_grp_kw_args.keys():
print"additional keyword arg: {‘%s‘: %s}" %(argKey,dict_grp_kw_args[argKey])
argFunc(3,4,name="wilber",age=28)
print
argFunc(3,4,"hello","world",name="wilber",age=28)
print

代码输出为:

函数调用的完整形式为:

func( positional_args, keyword_args, *tuple_grp_nonkw_args, **dict_grp_kw_args )

在使用的过程中,所有参数都是可选的,但应当注意的是:上面四种参数的位置是不可调换的。

匿名函数(lambda)

Python允许使用lambda关键字创建匿名函数,通过lambda关键字,可以快速编写简单函数。

使用lambda关键字的形式为:

lambda[arg1[,arg2,...argN]]: expression

对于不经常被调用的简单函数,建议直接使用lambda表达式,方便简洁:

addNum = lambdax,y: x+y
printaddNum
print"3 + 4 = ",addNum(3,4)

几个内建函数

 

Python可以很好的支持面向对象编程,但是通过Python中以下几个内建函数和lambda表达式,也可以体验一下函数式编程。

filter()

filter函数的完整形式为filter(func, seq):调用一个布尔类型的函数func来遍历每一个seq中的元素,返回一个使func返回值为ture的元素的序列。

例如获取100以内的奇数:

printfilter(lambdan: (n%2) == 1,range(100))

当然对于上面的例子,也可以使用列表解析实现:

print[iforiinrange(100)ifi%2 == 1]

map()

 

map函数的完整形式为map(func, seq1 [, seq2...]):将函数func作用于给定序列的每一个元素,并用一个列表来提供返回值;如果func为None,作用同zip()。

是不是被上面的描述搞晕了,还是看例子吧:

# map的func为None
printmap(None,[4,5,6])
printmap(None,[1,2,3],[4,5,6])
# map 针对一个序列
printmap(lambdax: x*2,[4,5,6])
# map 针对多个序列
printmap(lambdax,y: x + y,[1,2,3],[4,5,6])

代码输出为:

reduce()

reduce函数的完整形式为reduce(func, seq [, init]):func是一个二元函数;reduce对seq中的每一个元素进行迭代,每次迭代将上一次的迭代结果(第一次时使用init,如没有init,则使用seq的第一个元素)与下一个元素执行func函数。

看一个例子,通过reduce函数进行求和操作:

printreduce(lambdax,y: x + y,range(10))
printreduce(lambdax,y: x + y,range(10),100)

输出为:

根据上面的介绍,我们自己也可以实现一个reduce函数:

def xreduce(bin_func,seq,init=None):
Iseq = list(seq)
if init is None:
res = Iseq.pop(0)
else:
res = init
for obj inIseq:
res = bin_func(res,obj)
return res
时间: 2024-08-05 20:20:50

Python 函数相关的相关文章

Python函数相关

Python中的函数也是一种对象,而且函数还是一等公民.函数能作为参数,也能作为返回值,这使得Python中的函数变得很灵活.想想前面两篇中介绍的通过内嵌函数实现的装饰器和闭包. 下面就介绍一下Python函数相关的一写内容. 可变长度参数 在编程的过程中,可能会遇到函数参数个数不固定的情况,这时就需要使用可变长度的函数参数.在Python函数定义中,使用*和**符号分别指定元组(非关键字)和字典(关键字)作为参数. 非关键字变长参数(元组) 当函数被调用的时候,所有的参数都将值赋给了在函数声明

python拓展1 week1-week5复习回顾

知识内容: 1.python基础概念及基础语法 2.python基础数据类型 3.python模块相关 4.python函数相关 5.python面向对象相关 6.python文件处理相关 一.python基础概念及基础语法 1.python是一门什么样的语言,有何优缺点,有哪些应用领域? 2.python中的变量有何作用,该如何合理地命名? 3.解释一下python的and-or语法 4.python是如何进行内存管理的? 5.python中变量作用域有哪些?如何查看作用域? 6.Python

Python开发【第四篇】函数

函数的作用 函数可以让编程逻辑结构化以及模块化 无论是C.C++,Java还是Python,函数是必不可少的知识点,也是很重要的知识点,函数是完成一个功能的代码块,使用函数可以使逻辑结构变得更加清晰以及程序模块化设计 先来看看Python函数相关知识 1 def test(x): 2 """我是用来描述这个函数的""" 3 x += 1 4 return x 5 6 # def : 定义函数的关键字 7 # test: 函数名 8 # (): 里

python基础学习-函数相关

#!/usr/bin/env python # -*- coding:utf-8 -*- 函数相关 def f1(par,par2,par3="ok"): #定义函数   带参数,带参数默认值  带返回值 try: print( "this is function by %s %d %s" %(par ,par2,par3)) except: return False else: return True res = f1("wh",22) #调用

Python 学习日记第七篇 -- 函数相关

一.装饰器前戏-闭包简单来说,python中函数的闭包就是在内部函数里对外部作用域(但不是全局作用域)的变量进行引用,这么说,不太好理解,下面的示例帮助理解 def outer(): a = 1 def inner(): # 内部函数inner print(a) # 调用外部环境变量 return inner f = outer() f() 上面的示例就是一个闭包,inner是个内部函数,inner里调用外部作用域变量a,a不是全局变量:这样构成了一个闭包.上面这个例子外部变量是给定的,那么我们

Python递归函数相关

函数中调用其他函数是解决实际问题中常用方法,递归函数便是函数在运行过程中调用自身的函数.它像是循环的另一种表达方式,不过相较于写循环,递归函数封装性较好.可读性较强.在解决一些循环问题时,使用递归函数往往更简洁有效.以往提到递归函数时,理解仅仅到它比循环更简洁.今天读了博主程序员的人生A的博客后,学习到递归函数的调用机制以及通过尾递归优化解决栈溢出的问题,特留随笔,作温习记录用. 首先递归函数的调用是通过栈(stack)这一种数据结构实现,每多一次函数调用/返回,栈就增加/减少一层栈帧.既然提到

python学习笔记-Day04-第四部分(装饰器)

这周学到了python的装饰器,以前没有接触过,问了一个搞php开发的同事什么是装饰器,他说就好像构造函数一样,可惜我已经把构造函数忘得光光了,想不起来是啥了.现在就找资料了解了解.毕竟装饰器是一个不用也能实现程序的功能,但是用了装饰器以后会显得你的技术特NB,但是不太好理解 学装饰器之前,需要先了解一下函数,前面的笔记里,有写过函数相关的笔记,可以先去参考一下前面的文章,这里只简单说一下. 在python中,函数由  def 关键字,函数名,可选的参数列表和函数体 来组成,通过return语句

Python切片详解

先从原理上分析切片运算: list的切片,内部是调用__getitem__,__setitem__,__delitem__和slice函数.而slice函数又是和range()函数相关的. 给切片传递的键是一个特殊的slice对象.该对象拥有可描述所请求切片方位的属性,例如: 1 a = [ 1, 2, 3, 4, 5, 6 ] 2 x = a [ 1 : 5 ] # x = a.__getitem__( slice ( 1, 5, None ) ) 3 a [ 1 : 3 ] = [10, 1

12.python中的列表

列表和元祖最大的不同就是列表是可以修改的. 老规矩,先使用 help(list) ,真的是 help() 大法好呀. 好,来人,上代码. Help on class list in module __builtin__: class list(object) | list() -> new empty list | list(iterable) -> new list initialized from iterable's items | | Methods defined here: | |