博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python基础 三、函数
阅读量:4984 次
发布时间:2019-06-12

本文共 3470 字,大约阅读时间需要 11 分钟。

第五章 函数

参数

一、位置参数

调用函数时根据函数定义的参数位置来传递参数。

def print_hello(name, sex):    sex_dict = {1: u'先生', 2: u'女士'}    print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生'))# 两个参数的顺序必须一一对应,且少一个参数都不可以print_hello('tanggu', 1) #调用

二、关键字参数

用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

def print_hello(name, sex):    sex_dict = {1: u'先生', 2: u'女士'}    print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生'))print_hello('tanggu', sex=1)print_hello(1, name='tanggu')

三、可变参数

定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

def func(*args):    ....func()func(a)func(a, b, c)

我们传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。

def func(**kargs):    ....func(a=1)func(a=1, b=2, c=3)

kargs是一个字典(dict),收集所有关键字参数

函数

一、运算

len(a) #求长度min(a) #求最小值max(a) #求最大值sorted(a) #排序reversed(a) #逆序sum(a) #求和abs(a) #求绝对值

二、进制转换

bin(a) #转换为二进制oct(a) # 转换为八进制hex(a) # 转换为十六进制

三、ASCLL转换

ord(a) #返回对应的ASCLL值chr(a) #用一个范围在(0~255)整数作参数,返回对应的字符

四、高级函数

1、enumerate() 枚举

enumerate(sequence, [start=0])#实例seq = ['one', 'two', 'three']for i, element in enumerate(seq):    print i, element

2、zip() 配对

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

zip([iterable, ...])#实例>>> a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b)     # 打包为元组的列表[(1, 4), (2, 5), (3, 6)]>>> zip(a,c)              # 元素个数与最短的列表一致[(1, 4), (2, 5), (3, 6)]>>> zip(*zipped)          # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式[(1, 2, 3), (4, 5, 6)]

3、map() 映射

map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

map(function, iterable, ...)#实例>>>def square(x) :            # 计算平方数...     return x ** 2>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方[1, 4, 9, 16, 25]>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数[1, 4, 9, 16, 25]# 提供了两个列表,对相同位置的列表数据进行相加>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])[3, 7, 11, 15, 19]

4、filter() 过滤

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

filter(function, iterable)#实例def is_odd(n):    return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])print(newlist) #过滤出列表中的所有奇数

5、eval()

eval() 函数用来执行一个字符串表达式,并返回表达式的值。

>>> x = 7>>> eval( '3 * x' )21

6、reduce() #累积

>>>def add(x, y) :            # 两数相加...     return x + y>>> reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+515>>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数15

五、迭代器与生成器

1、迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:

import sys         # 引入 sys 模块list=[1,2,3,4]it = iter(list)    # 创建迭代器对象for x in it:    print (x, end=" ")    while True:    try:        print (next(it))    except StopIteration:        sys.exit()

2、生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。

import sys def fibonacci(n): # 生成器函数 - 斐波那契    a, b, counter = 0, 1, 0    while True:        if (counter > n):             return        yield a        a, b = b, a + b        counter += 1f = fibonacci(10) # f 是一个迭代器,由生成器返回生成 while True:    try:        print (next(f), end=" ")    except StopIteration:        sys.exit()

转载于:https://www.cnblogs.com/xjl-dwy/p/10411693.html

你可能感兴趣的文章
自动化测试工具 Test Studio入门教程
查看>>
Python之进程线程
查看>>
排序算法(一) —— 冒泡排序
查看>>
No.026:Remove Duplicates from Sorted Array
查看>>
SpringBoot项目的几种创建方式,启动、和访问
查看>>
窗外【1】
查看>>
解决"disabled". Expected Boolean, got Number with value 0
查看>>
Android 四大组件之Service
查看>>
OC--init,initialize,initWithCoder:,initWithFrame:各方法的区别和加载顺序
查看>>
xml.dom.minidom
查看>>
Exponentiation
查看>>
本地jar上传到本地仓库
查看>>
7.14T3
查看>>
四则运算C++带Qt界面版本,吾王镇楼。。。。。
查看>>
各种获取时间的方法包含各类时间格式
查看>>
安卓7.0手机拍照闪退问题解决
查看>>
黑马程序员------IO(一)
查看>>
springcloud的配置
查看>>
ME525+ Defy+ 刷机指南[zz]
查看>>
支持触屏的jQuery轮播图插件
查看>>