内置函数&匿名函数
1、内置函数
作用域相关
基于字典的形式获取局部变量和全局变量
globals()——获取全局变量的字典
locals()——获取执行本方法所在命名空间内的局部变量的字典
输入输出相关:
input() 输入
print() 输出
数据类型相关:
type(o) 返回变量o的数据类型
内存相关:
id(o) o是参数,返回一个变量的内存地址
hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。
- hash实例
hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字。
*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变。
文件操作相关
open() 打开一个文件,返回一个文件操作符(文件句柄)
操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)
可以用encoding指定编码.
模块操作相关
__import__导入一个模块
帮助方法
在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出
或者直接执行help(o),o是参数,查看和变量o有关的操作
和调用相关
callable(o),o是参数,看这个变量是不是可调用。
如果o是一个函数名,就会返回True
查看参数所属类型的所有内置方法
dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量
和数字相关
数字——数据类型相关:bool,int,float,complex
数字——进制转换相关:bin,oct,hex
数字——数学运算:abs,divmod,min,max,sum,round,pow
和数据结构相关
序列——列表和元组相关的:list和tuple
序列——字符串相关的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr
序列:reversed,slice
数据集合——字典和集合:dict,set,frozenset
数据集合:len,sorted,enumerate,all,any,zip,filter,map
内置函数小结:
其他:input,print,type,hash,open,import,dir
str类型代码执行:eval,exec
数字:bool,int,float,abs,divmod,min,max,sum,round,pow
序列——列表和元组相关的:list和tuple
序列——字符串相关的:str,bytes,repr
序列:reversed,slice
数据集合——字典和集合:dict,set,frozenset
数据集合:len,sorted,enumerate,zip,filter,map
2、匿名函数
2.1 匿名函数的基本描述:
- 匿名函数的格式:
函数名 = lambda 参数:返回值
参数:可以有多个,用逗号隔开
匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
返回值和正常的函数一样可以是任意数据类型
我们可以看出匿名函数并不是正的不能有名字,匿名函数跟正常的函数调用是一样的:函数名(参数)
- 例如有如下的代码
def calc(n):
return n**n
print(calc(10))
- 我们可以用匿名函数来替换:
calc = lambda n:n**n
print(calc(8))
匿名函数:calc:函数名
lambda: 定义匿名函数关键字和def相似
n:参数
n**n:返回值
例1:请把下面的函数转换为匿名函数
- def add(x,y):
return x+y
add = lambda x,y: x+y
print(add(2,3))
- 匿名函数是真的可以匿名:
- L = [3,2,100,999,213,1111,31121,333]
- print(max(L))
- dic = {'k1':10,'k2':100,'k3':30}
- print(max(dic))#这里实际比较的是key的ASCII值大小
- print(dic[max(dic,key = lambda k:dic[k])])
- 31121
- k3
- 100
- 这里的key就是字典的value值,k是字典的key,这里省去了匿名函数名
例2:把下面的代码转换为函数
- res = filter(lambda x:x > 10,[5,8,11,9,15])
- for i in res:
- print(i)
- def func(x):
- return x > 10
- res = filter(func,[5,8,11,9,15])#筛选大于10的数
- for i in res:
- print(i)
- 11
- 15
- 11
- 15
小结:
- 可以和lambda合作完成匿名函数的有:min、max、filter、map、sorted、zip
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
实际上zip(a,b)的作用就是把a和b里面的参数挨个组成元组,组成多少对是以少元素的那个为准- map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表
实际上map(function,a)就是a就是以function为原则进行计算,map()更多的是跟匿名函数lambda组合使用。- filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,
最后将返回 True 的元素放到新列表中
实际上是把一个其它函数func,然后用filter(func,x)来调用func,调用过程每次是由x来产生- sorted 语法:sorted(iterable[, cmp[, key[, reverse]]])
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
iterable -- 可迭代对象。
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
2.2 面试题1:下面程序的输出结果为:
- d = lambda p:p*2
- t = lambda p:p*3
- x = 2
- x = d(x) #
- x = t(x) #
- x = d(x) #
- print(x)
- 24
参考答案
2.3 面试题2:现在有两元组:
- (('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]
- L1 = (('a'),('b'))
- L2 = (('c'),('d'))
- dic = {}
- func = lambda a,b:x[a][b]
- func2 = lambda y:y[1]
- def func3(T2,x):
- return T2[x]
- # dic = {func(L[0][0]):func(L[1][0]),func2(L[0][1]):func2(L[1][1])}
- dic = {func3(L1[0]):func3(L2[0]),func3(L1[1]):func3(L2[1])}
- print(dic)
自己写的:错误
- 注意:考匿名函数,那么一般也要考相应的内置函数
- ret = zip((('a'),('b')),(('c'),('d'))) #组对
- def func(tup):
- return {tup[0],tup[1]}
- res = map(func,ret)
- print(list(res))
- ret = zip((('a'),('b')),(('c'),('d')))
- print(ret)
- for i in ret:
- print(i)
- dic = map(lambda tup:{tup[0]:tup[1]},ret)
- print(list(dic))
讲解的1:用了匿名函数等
- 讲解1结果:
- [{'a', 'c'}, {'b', 'd'}]
- <zip object at 0x000000000299C248>
- ('a', 'c')
- ('b', 'd')
- []
- zip()计算以后[('a','c'),('b','d')]
- ret = zip((('a'),('b')),(('c'),('d'))) #组对
- res = map(lambda tup:{tup[0]:[1]},ret)
- print(list(res))
讲解2:就用3条语句,匿名函数
- 讲解2打印结果:
- [{'a': [1]}, {'b': [1]}]
2.4 面试题3:以下代码的输出是什么?请给出答案并解释
- def multipliers():
- return [lambda x:i*x for i in range(4)]
- print([m(2) for m in multipliers()])
- [6, 6, 6, 6]
- 请修改multipliers的定义来产生期望的结果
参考答案:
内置函数&匿名函数的更多相关文章
- python学习日记(内置、匿名函数练习题)
用map来处理字符串列表 用map来处理字符串列表,把列表中所有水果都变成juice,比方apple_juice fruits=['apple','orange','mango','watermelo ...
- python基础学习Day14 内置函数 匿名函数
一.内置函数里几个高频重要函数 (1)min\max函数的用法 以min函数的为例: min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值). l1 =[(,),(, ...
- python笔记4 内置函数,匿名函数.递归函数 面向对象(基础, 组合,继承)
内置函数 eval和exec eval :执行字符串中的代码并将结果返回给执行者,有返回值 exec:执行字符串中的代码,往往用于执行流程语句,没有返回值. s1 = '1+2' s2 = 'prin ...
- Python中匿名函数与内置高阶函数详解
大家好,从今天起早起Python将持续更新由小甜同学从 初学者的角度 学习Python的笔记,其特点就是全文大多由 新手易理解 的 代码与注释及动态演示 .刚入门的读者千万不要错过! 很多人学习pyt ...
- python(内置高阶函数)
1.高阶函数介绍: 一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),如果满足其一,则为高阶函数. 常见的高阶函数:map().sorted( ...
- JMeter 内置日期(时间)函数总结
JMeter 内置日期(时间)函数总结 by:授客 QQ:1033553122 1. 测试环境 apache-jmeter-3.3 下载地址: http://jmeter.apache.org/c ...
- Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)
本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...
- python 练习题:请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串
# -*- coding: utf-8 -*- # 请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串 n1 = 255 n2 = 1000 print(hex(n1)) pr ...
- classmethod、staticclassmethod内置装饰器函数
# method 英文是方法的意思 # classmethod 类方法 # 当一个类中的方法中只涉及操作类的静态属性时,此时在逻辑上,我们想要直接通过类名就可以调用这个方法去修改类的静态属性,此时可以 ...
- property内置装饰器函数和@name.setter、@name.deleter
# property # 内置装饰器函数 只在面向对象中使用 # 装饰后效果:将类的方法伪装成属性 # 被property装饰后的方法,不能带除了self外的任何参数 from math import ...
随机推荐
- vue2.x入坑总结—回顾对比angularJS/React的一统
从感性的角度讲,我是不屑于用VUE,觉得react套件用起来更顺手,但是vue现在越来火,所以也不得入vue(杂烩汤)的坑.vue/anguarJS/React,三者对关系现在就是: https:// ...
- Vue学习5:条件渲染
上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- Linux 系统的启动过程
1.基本概念 BIOS 中文名 主板BIOS 外文名 Basic Input/Output System 全 称 基本输入输出系统(全称是ROM-BIOS,是只读存储器基本输入/输出 ...
- 暑期培训7日游解题思路(day1~day3)
暑期培训7日游解题思路(day1~day3) day1 第一天,王聿中老师出的题目比较简单,T1很水,T2是个简单的DP,T3还是有一点意思的.在网格图中删掉若干条边,使得所有格子都联通,求删掉的边的 ...
- Hadoop 进程配置总结
HDFS: NameNode: core-site.xml <property> <name>fs.defaultFS</name> <value>hd ...
- 记录tiny6410 使用linux-2.6.28.6内核遇到starting kernel...的问题
1\问题的解决主要是参考了tiny210相同的问题 2\/home/suxuandong/Documents/computer/linux_kernel/tiny6410/linux-2.6.28.6 ...
- Linux机器重启情况查询
在实际开发过程中,有时可能发现有一些服务器的进程挂了,查询相关错误日志也没有头绪.此时需要考虑是否是由于机器重启导致的错误 使用命令last reboot来查看是否机器自动重启 导致服务器重启的原因有 ...
- Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程
Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程 通配符证书一般还是比较贵的一般最便宜的通配符证书5.60美元一年,只不过Let'sEncrypt的有效期是3个月,对于一般用户来说基 ...
- oracle 对表的操作
对日期数据的插入 insert into tabname(datecol) value(sysdate) ; -- 用date值 insert into tabname(datecol) value ...
- postman工具的使用
https://www.cnblogs.com/rookie-c/p/5753948.html#4100341 https://www.jellythink.com/archives/category ...