day 13 内置函数

内置函数

https://www.processon.com/mindmap/5c10b787e4b0c2ee256a7c35

什么是内置函数,就是python给你提供的,拿来直接用的函数,比如print,input等等,截止到python.3.6.2版本一共给我们提供了68个内置函数.

 

abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()
delattr() hash() memoryview() set()


1.内存相关:hash,id

hash 必须是不可变的

id  查看内存地址的

 

2.调用相关:callable(重要)

  查看一个函数是否是可调用的,可调用: =-> (),能加括号的都是可调用

def func():
    pass

func()
print(callable(func))    #Ture 为可调用的

 

3.字符串相关:dir,eval,compile

dir:查看此类型的数据可以执行 哪些方法

print(dir("你好"))

 

eval:执行字符串类型的代码. 并返回最终结果

print(eval("2+2")) # 4
n = 8
print(eval("2+n")) # 10
def func():
print(666)
eval("func()") # 666

 

 

exec: 执行字符串类型的代码

exec("""
for i in range(10):
print(i)
""")
exec("""
def func():
print("我是周杰伦")
func()
""")

 

compile:将字符串类型的代码变异. 代码对象能够通过exec语句来执行或者eval()进行求

'''
参数说明:
1. resource 要执行的代码, 动态代码片段
2. 文件名, 代码存放的文件名, 当传入了第一个参数的时候, 这个参数给空就可以了
3. 模式, 取值有3个,
1. exec: 一般放一些流程语句的时候
2. eval: resource只存放一个求值表达式.
3. single: resource存放的代码有交互的时候. mode应为single
'''
code1 = "for i in range(10): print(i)"
c1 = compile(code1, "", mode="exec")
exec(c1)
code2 = "1+2+3"
c2 = compile(code2, "", mode="eval")
a = eval(c2)print(a)
code3 = "name = input('请输入你的名字:')"
c3 = compile(code3, "", mode="single")
exec(c3)
print(name)

有返回值的字符串形式的代码⽤eval(). 没有返回值的字符串形式的代码用exec(). 一般很少用
到compile()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.数学相关:sum,divmod,round,pow

sum:求和

print(sum([1,2,3,4]))  #10

 

 

 divmod:计算商和余数

print(divmod(20,3))   #(6,2)

 

 

round:整数是奇数 ->正常四舍五入 ,偶数 -> 五舍六入

 

pow:求次方

print(pow(2,3))    #8

 

 

5.和数据结构相关:enumerate,zip,sort,lambda,sorted,filter,reversed,map

enumerate:枚举

lst = ["篮球",'足球','摔跤',"挤公交"]
for i,el in enumerate(lst,100):
    print(i,el)

##
100 篮球
101 足球
102 摔跤
103 挤公交

 

 

zip:拉链函数

lst1 = ["赵四","刘能","香秀"]
lst2 = ["刘晓光","王晓丽","不知道"]
lst3 = ["街舞","磕巴",""]
z = zip(lst1,lst2,lst3)
print("__iter__" in dir(z))  #判断是否是可迭代对象    True

for el in z:
    print(el)

###
('赵四', '刘晓光', '街舞')
('刘能', '王晓丽', '磕巴')
('香秀', '不知道', '')

 

 sort:排序(升序,降序)

lst = [1,323,2321,421,432,]
lst.sort(reverse=True)
print(lst)

###
[2321, 432, 421, 323, 1]

 

 

 lambda:匿名函数

fn = lambda a,b(形参) : a+b(相当于return) #一般用来定义很简单的函数,复杂的功能不建议使用,使用场景:配合着sorted,map,fillter使用
ret = fn(3,5)
print(ret)

 

 

sorted:排序(按照规则进行排序,规则:长度,大小,数量...))

#方法1
lst = [1,2,3,4,5,6,7]
a = sorted(lst,reverse=True) #翻转
print(a)

###
[7, 6, 5, 4, 3, 2, 1]


#方法2
lst = ["胡一菲","张伟","关谷神奇","曾小贤吕小布","诺兰"]

#按照字符串长度排序
def func(s):
    return len(s) #返回长度

#执行流程:把可迭代对象中的每一项拿出来,作为参数传递给后面key函数.函数返回数字,根据数字进行排序
s = sorted(lst,key=func,reverse=True)   
print(s)
###
['曾小贤吕小布', '关谷神奇', '胡一菲', '张伟', '诺兰']


#方法3
lst = ["胡一菲","张伟","关谷神奇","曾小贤吕小布","诺兰"]

#按照字符串长度进行排序
print(sorted(lst,key= lambda s:len(s),reverse=True))

###
['曾小贤吕小布', '关谷神奇', '胡一菲', '张伟', '诺兰']


#方法4
lst = [{"name":"alex","shenggao":150,"tizhong":250},
       {"name":"wusir","shenggao":158,"tizhong":150},
       {"name":"taibai","shenggao":177,"tizhong":130},
       {"name":"ritian","shenggao":165,"tizhong":130},
       {"name":"nvshen","shenggao":160,"tizhong":120},
       {"name":"baolang","shenggao":183,"tizhong":190},
]
#按照体重进行排序
print(sorted(lst,key=lambda lst:lst['shenggao'],reverse=True))

 

 

 

 

filter:过滤

#方法1

lst = ["张无忌","张翠山","范冰冰","金毛狮王","李冰冰"]

#过滤掉姓张的人
fn = filter(lambda name : not name.startswith(""),lst)
print(fn)  #<filter object at 0x00000000021DC128> , filter处理完之后是在内存地址中
print("__iter__"in dir(fn)) #判断fn是不是可迭代对象
for el in fn:  #可迭代对象可以用for循环来拿数据,也可以用"__next__"来拿取数据
    print(el,end=" ")

###
范冰冰 金毛狮王 李冰冰


#方法2

lst = [{"name":"alex","shenggao":150,"tizhong":250}, {"name":"wusir","shenggao":158,"tizhong":150}, {"name":"taibai","shenggao":177,"tizhong":130}, {"name":"ritian","shenggao":165,"tizhong":130}, {"name":"nvshen","shenggao":160,"tizhong":120}, {"name":"baolang","shenggao":183,"tizhong":190}, ] #过滤掉体重大于180的人 fn = filter(lambda dic : dic["tizhong"] > 180,lst) for i in fn: print(i)

 

 reversed:翻转

#方法1

lst = ["张无忌","张翠山","范冰冰","金毛狮王","李冰冰"]
fn = reversed(lst)
print(list(fn))

###
['李冰冰', '金毛狮王', '范冰冰', '张翠山', '张无忌']

#方法2

huiwen = "上海自来水来自海上"

# s = huiwen[::-1]    #用步常来切片:上海自来水来自海上

it = reversed(huiwen)
s = ""  #空字符串拼接
for i in it:
    s += i
print(s)

###
上海自来水来自海上

 map:映射函数

语法:map(function, iterable) 可以对可迭代对象中的每一个元素进行映射. 分别取执行
function

 

计算每个元素的平方,返回新列表

函数版写法:
def func(e):
return e*e
mp = map(func, [1, 2, 3, 4, 5])
print(mp)
print(list(mp))

改写成lambda
print(list(map(lambda x: x * x, [1, 2, 3, 4, 5])))

 

 

计算两个列表中相同位置的数据的和

lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
print(list(map(lambda x, y: x+y, lst1, lst2)))

 

 

 

 

6.字符串相关:format,ord,chr,ascii,repr,r

format:格式化字符串,与具体数据相关,用于计算各种小数, 算等. 

s = "门神"
s1 = s.center(20)
print(s1)

###
         门神         #居中显示

#字符串
s = "门神"
print(format("门神","^20"))  #居中显示
print(format("门神","<20"))  #居左显示
print(format("门神",">20"))  #居右显示

#数值
print(format(3, 'b'))  # 二二进制  binary  0b11
print(format(65, 'c'))  # 转换成unicode字符  ascii
print(format(11, 'd'))  # 十十进制
print(format(11, 'o'))  # 八八进制  0o    13
print(format(11, 'x'))  # 十六进制(小写字母)
print(format(11, 'X'))  # 十六进制(大写字母)
print(format(11, 'n'))  # 和d一样
print(format(11))  # 和d⼀样

#科学计数
print(format(123456789, 'e')) # 科学计数法. 默认保留6位小数  表示大的数据
print(format(123456789, '.2e')) # 科学计数法. 保留2位小数(小写)
print(format(123456789, '0.2E')) # 科学计数法. 保留2位⼩数(大写)

#浮点计数法
print(format(1.23456789, 'f')) # 浮点数计数法. 保留6位小数
print(format(1.23456789, '0.2f')) # 小浮点数计数法. 保留2位小数
print(format(1, '0.10f')) # 小浮点数计数法. 保留10位小数
print(format(1.23456789e+10000, 'F')) # 小浮点数计数法.

 

 

 

ord:显示字符串在编码中的位置,chr:显示编码中某个位置的字符串

print(ord(""))  #20013  显示"中"字在编码中的位置
print(chr("20013")) # 中  显示编码"20013"的位置是什么字


#打印编码中所有字符
for i in range(65536):
        print(chr(i),end=" ")

 

 

ascii:判断你给的信息是否是ascii

print(ascii(""))    #'\u4e2d'

 

 

repr:还原字符串最官方的效果

 

r:原封不动的显示字符串

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-01-15 08:28  jack_zhangn`  阅读(167)  评论(0编辑  收藏  举报