python 基础 内置函数 和lambda表达式
1.将对象用字符串的方式表示出来有两种方法。
通常我们打印一个对象,情况为这样:
class A:
def __init__(self):
self.name = 1 a = A() print(a) #j结果:
<__main__.A object at 0x10c899668>
(1)str()用于将数值转化为易于人读的形式。print(str("我是中国人"))>>>我是中国人
class A:
def __init__(self):
self.name = 'hello' def __str__(self):
return self.name a = A() print(a) #结果:
hello
(2)repr()用于将数值转化为易于解释器读的形式输出的是字符串的官方标准。str出来的值是给人看的字符串,repr出来的值是给机器看的,括号中的任何内容出来后都是在它之上再加上一层引号。
class A:
def __init__(self):
self.name = 'hello' # def __str__(self):
# print("a")
# return self.name def __repr__(self):
print("b")
return self.name a = A() print(a) #结果
hello
__repr__和__str__的区别在于,后者是在str()函数中被使用的,或在print打印一个对象时才使用
print(repr("我是中国人"))>>>"我是中国人" 。Python中出现的任何中文,虽然我们在编辑器里看到的是中文,但是背地里全是一串编码。千万不要轻易信任print!print xx给你显示出来的,
其实并不是xx的真实面貌!
2.eval()将字符串str当成有效的表达式来求值并返回计算结果. 不建议用,因为有很大的安全隐患。具体百度,它会把你的系统命令给执行了。
l="5+8"
print(eval(l))
结果:
13
3.exec函数和eval函数类似,动态执行Python代码。也就是说exec可以执行复杂的Python代码,而不像eval函数那么样只能计算一个表达式的值。,只不过eval函数只用于执行表达式求值,而exec函数主要用于执行语句块。
exec("l=5+6") #注意这里不用赋值
print(l)
11
4.compile()编译函数:compile(source, filename, mode[, flags[, dont_inherit]])
) 将字符串类型代码进行编译。代码对象可以通过exec()或eval(),进行执行。
1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。
2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。
3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。
code1="for i in range(0,10):print(i)"
compile1=compile(code1,"","exec")
print(exec(compile1))
结果:
0
1
2
3
4
5
6
7
8
9
None
4.内建函数:
list(iterable)把可迭代对象转换成列表
tuple(iterable)把可迭代对象转换成元组
str(obj)把对象转化为字符串(对象的字符串表示法)
高阶函数3剑客
什么是高阶函数?
高阶函数是这样的一个函数,它接收另一个函数作为参数,并且以某种方式使用该函数.
filter()
过滤函数:filter(func or None, iterable):函数用于过滤序列,过滤掉不符合该函数的元素,返回由符合该函数元素组成的迭代器.
该接收两个参数,第一个为判断函数或为None,第二个为可迭代对象,序列的每个元素作为参数传递给函数进行判断,最后将返回 True 的元素放到新的迭代器中。如果选择的是None,则返回的是包含这个序列所有元素的迭代器。
例子:
def is_odd(x):return x%2==0 #这里返回值直接接判断条件和 你先if 再return True 是一样的
ret=filter(is_odd,[1,4,6,7,8,9,12,17]) #这里输入的是函数名而不是调用的函数不需要加括号。
print(ret)
print(list(ret)) #把迭代器转化为列表
结果:
<filter object at 0x000001EAB5EFC160>
[4,6,8,12]
例子二
newlist = filter(None, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print((newlist))
print(list(newlist))
结果
<filter object at 0x000002A9FA02C0F0>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
map()
map()函数: map(func,iterable)→迭代器→ new iterable , 和filter不同的是map中的func,接收的是一个计算式,然后它把iterable中的元素拿到计算式中进行计算,最后得到一个包含表达式结果的迭代器。
def f(x):
return x*x
r=map(f,[1,2,3,4])
a=map(str,[1,2,3,4])
print("ddd",next(a)) #含有next方法
print('aa',list(a))
结果:
ddd 1
aa ['2', '3', '4']
reduce()
reduce() 函数会对参数可迭代中的元素按照该函数进行累积(也就是先把迭代对象中的前两个元素按照该函数进行计算,算出的结果再和第三个元素按照该函数进行计算,一次类推)。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果.
语法
reduce() 函数语法:
reduce(function, iterable[, initializer])
参数
- function -- 函数,有两个参数
- iterable -- 可迭代对象
- initializer -- 可选,初始参数
from functools import reduce #在python3中需要导入reduce def add(x,y): #一定要传两个参数
return x+y ff=reduce(add,[1,2,4,5]) #其实就是1+2=3 3+4=7 7+5=12
print(ff)
结果:
12
以下不属于高阶函数
sorted临时排序函数:sorted(iterable[, cmp[, key[, reverse]]]) 把iterable中的items进行排序之后,返回一个新的列表,原来的iterable没有任何改变.ist 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
iterable:是可迭代类型;
key:传入一个函数名,函数的参数是可迭代类型中的每一项,根据函数的返回值大小排序;
reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,默认值为升序。
返回值:有序列表
列表按照其中每一个值的绝对值降序排序
def ab(n):
if n <0:
return -n
else:
return n li=[1,3,5,-2,6,-9] newlist=sorted(li,key=ab,reverse=True)
print(li)
print(newlist)
结果:
[1, 3, 5, -2, 6, -9]
[-9, 6, 5, 3, -2, 1]
zip
zip()拉链函数:函数用于将每个可迭代的对象作为参数,将对象中对应的元素打包成一个个的元组,然后返回由这些元组组成的迭代器。
如果各个迭代器的元素个数不一致,则返回元组个数与最短的迭代对象相同,利用 * 号操作符,可以将元组迭代器解包为各个元组。
l1=[1,2,3]
l2=[4,5,8,3]
print(*(zip(l1,l2)))
结果:
(1, 4), (2, 5), (3, 8)
6.数据函数:
divmod()函数: 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
print(divmod(3,2))
结果:
(1, 1)
min()函数:
min
(iterable, *[, key, default])
min
(arg1, arg2, *args[, key])
函数功能为取传入的多个参数中的最小值,或者传入的可迭代对象元素中的最小值。默认数值型参数,取值小者;字符型参数,取字母表排序靠前者。还可以传入命名参数key,其为一个函数,用来指定取最小值的方法。default命名参数用来指定最小值不存在时返回的默认值。功能与max函数相反。
print(min(26,7,8,9))
结果
7
同类型之间可以进行比较
print(min([1,2],[1,3]))
[1, 2]
key参数的另外一个作用是,不同类型对象本来不能比较取最小值的,传入适当的key函数,变得可以比较能取最小值了。
print(min(1,2,'',key = int))
结果:
1
lambda
lambda函数也叫作 匿名函数,即函数没有具体的名字,出现的背景我认为是临时性创造一个匿名函数给map,filter.或reduce
比如:
正常函数这样写:
def func(x):
return (x+1)
lambda函数这样写:
func=lambda x:x+1
print(func(1))
lambda函数的作用
1 用python写一些执行脚本时,可以省去定义函数的过程,让代码更简洁
2.对于一些抽象的,不会别的地方再复用的函数,有时候给函数起名字也是一个难题
3. 使用lambda在某些时候让代码更容易理解
4.临时性创造一个匿名函数给map,filter.或reduce
比如我们写一个从列表中删除0分的一个函数
f=filter(lambda x:x>0,[1,50,6,0])
print(list(f))
结果:
[1, 50, 6]
lambda函数的语法规则:
冒号前是参数,可以有多个,用逗号隔开,冒号后面是返回值,lambda语句其实是构造的一个函数对象. 这里你要见证一下
func=lambda x:x+1
print(func) def f(x):
return (x+1)
print(f)
结果:
<function <lambda> at 0x0000023C65DF1E18>
<function f at 0x0000023C65FBF488>
这儿的lambda有一个大坑
val= [(lambda n: i+n) for i in range(5)]
for i1 in val:
print(i1(2))
结果是:
6
6
6
6
6
为什么是这样呢,为什么不是
2
3
4
5
6
把上边的lambda表达式其实是这样写:
for i in range(4):
def f(x):
return i*x
t=f(2)
print(t)
结果:
6
上边没有达到预期的原因是lambda中的i 用的匿名函数外的全局变量,修改一下
val= [(lambda n,i=i: i+n) for i in range(5)]
for i1 in val:
print(i1(2))
结果:
2
3
4
5
6
参考http://www.cnblogs.com/coderzh/archive/2010/04/30/python-cookbook-lambda.html
https://zhuanlan.zhihu.com/p/37063984
python 基础 内置函数 和lambda表达式的更多相关文章
- python基础——内置函数
python基础--内置函数 一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...
- python基础-内置函数详解
一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highlight=built#ascii ...
- python基础----内置函数----匿名函数(lambda)
Python3版本所有的内置函数: 1. abs() 获取绝对值 >>> abs(-) >>> abs() >>> abs() >>& ...
- python学习day11 函数Ⅲ (内置函数与lambda表达式)
函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...
- map内置函数、lambda表达式、快捷生成想要的列表、filter内置函数
map函数 语法 map(function, iterable, ...) 参数 function -- 函数,有两个参数 iterable ...
- Python 基础 内置函数 迭代器与生成器
今天就来介绍一下内置函数和迭代器 .生成器相关的知识 一.内置函数:就是Python为我们提供的直接可以使用的函数. 简单介绍几个自己认为比较重要的 1.#1.eval函数:(可以把文件中每行中的数据 ...
- Python菜鸟之路:Python基础-内置函数补充
常用内置函数及用法: 1. callable() def callable(i_e_, some_kind_of_function): # real signature unknown; restor ...
- Python基础-内置函数总结
内置函数 int('123') float() string() tuple() set() dict(name='zdd',age=18) type()#查看类型 len()#看长度,其实是元素的个 ...
- python基础--内置函数map
num_1=[1,2,10,5,3,7] # num_2=[] # for i in num_1: # num_2.append(i**2) # print(num_2) # def map_test ...
随机推荐
- js动态检测加载 JQ
var jqcdnurl = 'https://cdn.bootcss.com/jquery/3.2.1/jquery.js'; //控制台输出 function log() { for (var i ...
- rac 配置dg完成版
********************************************************************************************集群环境下的da ...
- Oracle用户密码认证方式
oracle用户有两种认证方式: 操作系统认证(要求该用户属于本地DBA组,然后通过操作系统认证登录oracle,从而启动数据库) 密码文件认证 oracle使用哪种认证方式决定在于两个参数: 1.r ...
- mongodb副本集修改配置问题
因虚拟机地址被占用,需要重新设置ip地址,这时需要修改副本集中的IP地址配置: 1: 查看配置rs.config():需要找到primary主机,在该主节点服务器上才有权限修改配置 2:rs.remo ...
- [CodeForces - 614D] D - Skills
D - Skills Lesha plays the recently published new version of the legendary game hacknet. In this ver ...
- NOIP2003加分二叉树
题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第ii个节点的分数为di,treedi,tree ...
- Mysql可重复读原理
mysql可重复读现象及原理分析 InnoDB---可重复读隔离级别的底层实现原理 概念 可重复读的实现 Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插 ...
- git reset --hard 恢复
git reset --hard ,再然后,悲剧上演~ 恢复方法: 使用 git reflog 来找到最近提交的信息,这里贴出部分信息: F:\voidy>git reflog WARNING: ...
- 微信UnionId 部分开放
以前要获得UnionID, 需要把公众号绑定到微信开放平台, 这个微信开放平台垃圾,还要300认证费. 今天突然发现在这个接口 https://api.weixin.qq.com/cgi-bin/us ...
- Win10系列:UWP界面布局基础3
在实际项目开发中,为控件属性赋值时经常会遇到属性值在设计时处于未知状态,而只有在应用程序运行时才能获取到.这种情况下,直接赋值方法是无法满足的,可以使用XAML标记扩展(Markup Extensio ...