Python基础(二)——常用内置函数
1. 常用内置函数
(1)isinstance(object, classinfo)
用于判断一个对象是否为某一类型。
- object 是实例对象
- classinfo 是基本类型如 int, float 或者是类名或者是由它们组成的元组。
print(isinstance(1, (int, str, float))) #True。实例 + 元组
print(isinstance('', dict)) #Flase 实例 + 基本类型
(2)type()
- type(Class) 输出<class 'type'>。type(实例) 输出 <class '类名'>
(3)map(function, iterable)
map(function, iterable) 产生一个将function应用于迭代对象中的所有元素并返回结果的迭代器。
from collections.abc import Iterator,Iterable def test(x):
return x * 2 L = map(test, [1,2,3]) print(L) #<map object at 0x0000020C55F14390>
print(isinstance(L, Iterator)) #true
print(list(L)) #[2, 4, 6].list(iterable) list是一个构造器,其中的项与 iterable 中的项相同。 print(list(map(str, [1,2,3,3]))) #['1', '2', '3', '3']
如上文所说,将 test() 函数应用于元素 1 * 2 = 2.....。其中第12行同第10行一致,注意通过list()函数将map()迭代器内容输出。
(4)reduce(function,iterable)
官网给了个例子:reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 等价于 ((((1+2)+3)+4)+5) 。这里划线部分其实就是个函数,这个函数是实现 x + y,将改函数应用于右边的 iterable,但是和map的区别就是,这个reduce有一个累加效果,也就是将上一步计算的结果当作下一步计算的参数,如下:
from functools import reduce
def sum(x, y):
return x + y L = [1, 2, 3]
R = reduce(sum, L)
print(R) #
即第六行sum函数需要两个参数,参数从L中取为1,2。送入sum计算得到3,然后3当作x,L中的3当作y,继续送入sum函数计算,得到3 + 3 = 6
再看一个例子:
# 将字符串转成数字
from functools import reduce
dict = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9} #'124' -> ((0*10+1)*10+2)*10+4
def char2numb(c):
return dict[c] def calculate(x, y):
return x * 10 + y def str2numb(s):
return reduce(calculate, list(map(char2numb, s))) #结合使用map很关键,char2numb函数应用到字符串上
print(str2numb(''))
(5)匿名函数
匿名函数关键字是lambda,且函数不需要定义名称,比如:
def cube(y):
return y * y * y; g = lambda x: x * x * x # 将匿名函数赋值给一个变量g,再利用变量来调用该函数
print(g(7)) print(cube(5))
cube函数同g是相似的。lambda冒号前的是参数,可以多个,用逗号隔开,冒号右边是返回值。
lambda函数解和map和reduce一起使用:
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
final_list = list(map(lambda x: x*2 , li))
print(final_list) #[10, 14, 44, 194, 108, 124, 154, 46, 146, 122]
from functools import reduce
li = [1, 2, 3]
sum = reduce((lambda x, y: x * y), li)
print (sum) # 6
(个人觉得,也不是非lambda不可,是鸡肋吗?先在这埋下伏笔)
lambda 在闭包中的使用,看详看第六点。
(6)闭包(点击查看)
(7)filter(function,iterable)
用iterable中函数function返回真的那些元素,构建一个新的迭代器。官网上有两句话:①当function为None,则item for item in iterable if item。②当function不是None,item foritem in iterable if function(item)。
#①
print(list(filter(None,[0, 1, 33, False, None]))) # [1, 33] #②
def test(x):
return x % 2 == 0
print(list(filter(test, [1,2,3,4]))) # [2, 4] #又如
def not_empty(s):
return s and s.strip()
print(list(filter(not_empty, ['A', '', 'B', None, 'C', ' ']))) # ['A', 'B', 'C']
通过例子很好理解,不过多解释。
用filter筛选素数(廖雪峰网站):
def _odd_iter():
n = 1
while True:
n = n + 2
yield n def _not_divisible(n):
return lambda x: x % n > 0 def primes():
yield 2
it = _odd_iter() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
yield n
it = filter(_not_divisible(n), it) # 构造新序列 # 打印1000以内的素数:
for n in primes():
if n < 1000:
print(n)
else:
break
因为这段代码比较复杂,尤其是第16行,所以在上文先铺垫了①匿名函数②闭包③生成器。
(8)sorted(iterable,*,key=None,reverse=False)
根据iterable中的项,将项按照key(带有单个参数的函数)处理,处理之后排序。
print(sorted([-9, 0 ,89, 22])) # [-9, 0, 22, 89] print(sorted([-9, 0, 22, 89], key=abs)) # [0, -9, 22, 89] # 忽略大小写(因为阿斯克码)按首字母排序
print(sorted("This is a test string from Andrew".split(), key=str.lower))
#['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
list.sort()的使用如[1, 2, 3, 1].sort()。但是效率没有sorted([1, 2, 3, 1])高。另一个区别是list.sort()只为列表定义,而sorted()可以用于任何迭代对象。
DICT = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}
print(sorted(DICT, reverse=True)) # [5, 4, 3, 2, 1]
(9)enumerate(sequence, [start=0])
此函数将一个可遍历对象组合成索引序列。一般用在 for 循环中
s = [4, 6, 7, 1]
for i in s:
print(i,end=' ') print('\n', '=======') for i in enumerate(s):
print(i, end='') # 输出 索引+值 的结构 print('\n', '=======') for b,i in enumerate(s):
print(b,i,end='|') print('\n', '=======') for b,i in enumerate(s, 99): # 99为自定义索引开始值
print(b,i,end='|')
输出结果:
4 6 7 1
=======
(0, 4)(1, 6)(2, 7)(3, 1)
=======
0 4| 1 6| 2 7| 3 1|
=======
99 4| 100 6| 101 7| 102 1|
2. 补充
(1) import VS from .... import
import sys
print('命令行参数为:')
for i in sys.argv:
print(i)
print('\n python 路径为',sys.path)
from sys import argv, path
print('命令行参数为:')
for i in argv:
print(i)
print('\n python 路径为', path)
(2)函数可以被安插在“任何”地方(in Python everything is an object)
这个怎么说呢,就是 Python 中的 function 真的无所不能,被用的神乎其神(我都被秀晕了QAQ),并不像 C/Java 中被固定的死死的,只能返回返回值被调用。至少学到现在,我发现Python中的函数不单单就是个函数,比如:
#函数嵌套函数
#嵌套在函数内部函数不能被外界调用,只能内部使用
def test(x, y):
def calculate(x):
return x * x
return calculate(x) + y
print(test(2, 2)) # #函数可以元组中的一项
L = [test, ''] #[<function test at 0x000001F196848A60>, '11']
print(L)
print(L[0](2, 2)) #
#最后一句就是取L的第一项[0],因为是test所以传入参数(2,2) #函数可以赋值给变量
g = test
print(g(2, 2)) # 6. g 现在也就是test()复制品 #函数当作参数传入函数如上文map
# 函数可以当返回值
def test():
def test2():
print('')
return test2 #注意不是写成 test2().加了括号就是调用test2(),然后此句return回test2()给的return了。可看后面的例子
g = test()
print(g) # <function test.<locals>.test2 at 0x000002721DDB8AE8> #例子
# def test():
# def test2():
# print('1111') # 1111
# return test2()
# print(test()) # None
以后遇到不断补充......
Python基础(二)——常用内置函数的更多相关文章
- Python 基础之常用内置函数
1.常用内置函数 (1)abs 绝对值函数 intvar = -9 res = abs(intvar)print(res) (2)round 四舍五入 (n.5 n为偶数则舍去 n.5 n为奇数 ,则 ...
- python基础之常用内置函数
前言 python有许多内置的函数,它们定义在python的builtins模块,在python的代码中可以直接使用它们. 常用的内置函数 类型转换 int python的整数类型都是int类型的实例 ...
- PYTHON语言之常用内置函数
一 写在开头本文列举了一些常用的python内置函数.完整详细的python内置函数列表请参见python文档的Built-in Functions章节. 二 python常用内置函数请注意,有关内置 ...
- Python基础学习五 内置函数
1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...
- python基础学习笔记——内置函数
一. 简介 python内置了一系列的常用函数,以便于我们使用,python英文官方文档详细说明:点击查看, 为了方便查看,将内置函数的总结记录下来. 二. 使用说明 以下是Python3版本所有的内 ...
- python 基础篇 15 内置函数和匿名函数
------------------------>>>>>>>>>>>>>>>内置函数<<< ...
- python基础 (装饰器,内置函数)
https://docs.python.org/zh-cn/3.7/library/functions.html 1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使 ...
- python基础学习Day14 内置函数 匿名函数
一.内置函数里几个高频重要函数 (1)min\max函数的用法 以min函数的为例: min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值). l1 =[(,),(, ...
- python基础一 day15 内置函数
'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖: '\n' 换行,换到当前位置的下一行,而不会回到行首: # print()# input()# le ...
- Python学习笔记-常用内置函数
输出:print() 功能:输出打印 语法:print(*objects, sep=' ', end='\n', file=sys.stdout) 参数:objects----复数,表示可以一次输出多 ...
随机推荐
- Net Core下通过Proxy 模式
Net Core下通过Proxy 模式 NET Core下的WCF客户端也是开源的,这次发布.NET Core 2.0,同时也发布了 WCF for .NET Core 2.0.0, 本文介绍在.NE ...
- 渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(下)
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/12/es-code03/ 前提 上篇文章写完了 ES 流程启动的一部分,main 方法都入 ...
- 洛谷P2430 严酷的训练
第一眼看这道题...啊哈,啥??? 仔细看一看,发现:诶, 这不是01背包吗? 两人水平值的比值*老王做题用时 可以算出WKY做每道题的用时. 那么每道题的p就可以转换成费用c[i], 价值q就是w[ ...
- 1169 传纸条 2008年NOIP全国联赛提高组 个人博客:attack.cf
1169 传纸条 2008年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小渊和小轩 ...
- To the world you may be one person, but to one person you may be the world.
To the world you may be one person, but to one person you may be the world.对于世界而言,你是一个人:但对于某人而言,你是他的 ...
- CDN加速服务
CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一般的CDN公共库都会包含全球所有最流行的开源JavaScrip ...
- 获取元素Bytagname区别/for循环应用
一:两种获取元素方式的区别.1.var aLi = oUl.getElementsByTagName('li');TagName前面可以加其他东西,id就只能是document,2,Id是静态的,ta ...
- BZOJ 4896 :[Thu Summer Camp2016]补退选 Trie树+Vector
4896: [Thu Summer Camp2016]补退选 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 315 Solved: 97[Submi ...
- ASUS主板 Type C 接口无效问题
修改UEFI设置,把 USB TYPE C POWER SWITCH 改成启用
- HDU - 5491 The Next 2015 ACM/ICPC Asia Regional Hefei Online
从D+1开始,对于一个数x,区间[x,x+lowbit(x))内的数字的二进制位上1的数量整体来说是单调不减的,因此可快速得出1在这个区间的取值范围. 每次判断一下有没有和[s1,s2]有没有交集,一 ...