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*[, keydefault])

min(arg1arg2*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表达式的更多相关文章

  1. python基础——内置函数

    python基础--内置函数  一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...

  2. python基础-内置函数详解

    一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highlight=built#ascii ...

  3. python基础----内置函数----匿名函数(lambda)

    Python3版本所有的内置函数: 1. abs() 获取绝对值 >>> abs(-) >>> abs() >>> abs() >>& ...

  4. python学习day11 函数Ⅲ (内置函数与lambda表达式)

    函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...

  5. map内置函数、lambda表达式、快捷生成想要的列表、filter内置函数

      map函数                             语法 map(function, iterable, ...) 参数 function -- 函数,有两个参数 iterable ...

  6. Python 基础 内置函数 迭代器与生成器

    今天就来介绍一下内置函数和迭代器 .生成器相关的知识 一.内置函数:就是Python为我们提供的直接可以使用的函数. 简单介绍几个自己认为比较重要的 1.#1.eval函数:(可以把文件中每行中的数据 ...

  7. Python菜鸟之路:Python基础-内置函数补充

    常用内置函数及用法: 1. callable() def callable(i_e_, some_kind_of_function): # real signature unknown; restor ...

  8. Python基础-内置函数总结

    内置函数 int('123') float() string() tuple() set() dict(name='zdd',age=18) type()#查看类型 len()#看长度,其实是元素的个 ...

  9. 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 ...

随机推荐

  1. 26. Remove Duplicates from Sorted Array C++ 删除排序数组中的重复项

    https://leetcode.com/problems/remove-duplicates-from-sorted-array/ 双指针,注意初始时左右指针指向首元素! class Solutio ...

  2. maven聚合工程tomcat插件启动没有 Starting ProtocolHandler ["http-bio-8081"]

    Starting ProtocolHandler ["http-bio-8081"]无法显示,一般有三个原因: (1)数据库连不上: (2)注册中心连不上(我这里用的是zookee ...

  3. qt 调用zlib压缩与解压缩功能

    Zlib是一种免费且通用的压缩库,由于Zlib压缩效果比LZW好,而且解压缩速度快,更重要的是商业软件中使用Zlib不需要缴纳版权费,所以很多游戏都使用Zlib压缩资源文件. Zlib是由Jean-l ...

  4. 面向对象的Java实现

    1.面向对象的Java实现--封装 1-1:封装 a.为什么需要封装(封装可以是数据方便维护.增加实用性.方便扩展等等.通过面向对象的思想,模拟现实生活中的事物.) b.什么是封装(封装就是将属性私有 ...

  5. php 日志模块源码解析

    php日志模块设计 Monolog 是PHP的一个日志类库解析 整体介绍:monolog日志模块遵循 PSR3 的接口规范.主要有日志格式类接口(格式化日志信息),处理类接口(写日志的驱动,通过扩展写 ...

  6. 在vue项目中使用sass

    如果想开发移动端项目,那么适配的时候sass必不可缺,但是 npm  安装sass时候总是报错失败! 研究半天发现可以解决的方法,亲测有效 1.先换成淘宝镜像再安装 npm install -g cn ...

  7. Java ip地址查询,根据ip接口获得ip所在省市区,邮编,运营商等

    早上一来,项目经理就说需要添加一个用户ip归属地查询功能,然后在网上搜罗半天,研究出一个比较简单的方法,通过接口返回地址json数据 有百度接口,新浪接口,这里用的是淘宝ip接口 通过淘宝IP地址库获 ...

  8. 转 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤

    MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. http://www.mathworks.cn/products/matlab-coder/ 使用MATL ...

  9. error TS2304: Cannot find name 'Promise' && TS2307: Cannot find module '**'

    error TS2304: Cannot find name 'Promise' 解决方法:在编译选项中加入"target":"es6" { "ver ...

  10. linux文件管理 文件操作

    文件操作 pwd 命令 该命令的英文解释为print working direction(打印工作目录).输入pwd命令,Linux输出当前目录. cd 命令 用来改变所在目录 cd / 转到根目录 ...