Day 12 内置函数,匿名函数与递归

内置函数

python中内置函数一共有68中,以下是对其中一些功能的简介。

1.基础数据型函数

bool :用于将给定参数转换为布尔类型,如果没有参数,返回 False。

int:函数用于将一个字符串或数字转换为整型。

float:函数用于将整数和字符串转换成浮点数。

complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。

print(int(7/3))--->会自动取整
print(int('01011',base=2)) --->可以指定进制
print(complex(1,2)) --->(1+2j)

  

bin:将十进制转换成二进制并返回。

oct:将十进制转化成八进制字符串并返回。

hex:将十进制转化成十六进制字符串并返回。

print(bin(17),type(bin(17)))
print(oct(17),type(oct(17)))
print(hex(17),type(hex(17)))
转出来的都是str

  

abs:函数返回数字的绝对值。

divmod:计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。

round:保留浮点数的小数位数,默认保留整数。

pow:求x**y次幂(三个参数为x**y的结果对z取余)。

sum:对可迭代对象进行求和计算(可设置初始值)。

print(round(3.229567,3))#默认四舍五入,0不返回
print(pow(4,3,3))

  

min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)。

max:返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)。

l1 = [('alex',1000),('太白',18),('wusir',500)]
def ake(x):
    return x[-1]
print(min(l1))
print(min(l1,key=ake))#按每个元组的第二个值来比较
dic = {'a':3,'b':2,'c':1} 
print(min(dic))
print(min(dic.items(),key=ake))#按字典的value来比较

过程:
1, 将iterable的每一个元素当做函数的参数传进去
2,会按返回值去比较
3,返回的是遍历的元素x

  

list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素)。

tuple:将一个可迭代对象转化成元祖(如果是字典,默认将key作为元祖的元素)。

str:将数据转化成字符串。

dic = {'a':3,'b':2,'c':1}
print(list(dic.values()))#将字典的value转成列表
print(list(dic.items()))#将字典的键值对转成元组,再放到列表

  

format:与具体数据相关,用于各种计算,详情如下。

 

#字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐
print(format('test', '<20'))
print(format('test', '>20'))
print(format('test', '^20'))

#整形数值可以提供的参数有 'b' 'c' 'd' 'o' 'x' 'X' 'n' None
>>> format(3,'b') #转换成二进制
'11'
>>> format(97,'c') #转换unicode成字符
'a'
>>> format(11,'d') #转换成10进制
'11'
>>> format(11,'o') #转换成8进制
'13'
>>> format(11,'x') #转换成16进制 小写字母表示
'b'
>>> format(11,'X') #转换成16进制 大写字母表示
'B'
>>> format(11,'n') #和d一样
'11'
>>> format(11) #默认和d一样
'11'

#浮点数可以提供的参数有 'e' 'E' 'f' 'F' 'g' 'G' 'n' '%' None
>>> format(314159267,'e') #科学计数法,默认保留6位小数
'3.141593e+08'
>>> format(314159267,'0.2e') #科学计数法,指定保留2位小数
'3.14e+08'
>>> format(314159267,'0.2E') #科学计数法,指定保留2位小数,采用大写E表示
'3.14E+08'
>>> format(314159267,'f') #小数点计数法,默认保留6位小数
'314159267.000000'
>>> format(3.14159267000,'f') #小数点计数法,默认保留6位小数
'3.141593'
>>> format(3.14159267000,'0.8f') #小数点计数法,指定保留8位小数
'3.14159267'
>>> format(3.14159267000,'0.10f') #小数点计数法,指定保留10位小数
'3.1415926700'
>>> format(3.14e+1000000,'F')  #小数点计数法,无穷大转换成大小字母
'INF'

#g的格式化比较特殊,假设p为格式中指定的保留小数位数,先尝试采用科学计数法格式化,得到幂指数exp,如果-4<=exp<p,则采用小数计数法,并保留p-1-exp位小数,否则按小数计数法计数,并按p-1保留小数位数
>>> format(0.00003141566,'.1g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点
'3e-05'
>>> format(0.00003141566,'.2g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留1位小数点
'3.1e-05'
>>> format(0.00003141566,'.3g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留2位小数点
'3.14e-05'
>>> format(0.00003141566,'.3G') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点,E使用大写
'3.14E-05'
>>> format(3.1415926777,'.1g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留0位小数点
'3'
>>> format(3.1415926777,'.2g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留1位小数点
'3.1'
>>> format(3.1415926777,'.3g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留2位小数点
'3.14'
>>> format(0.00003141566,'.1n') #和g相同
'3e-05'
>>> format(0.00003141566,'.3n') #和g相同
'3.14e-05'
>>> format(0.00003141566) #和g相同
'3.141566e-05'
View Code

 

 

bytes:用于不同编码之间的转化。

bytearry:返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。

memoryview:略

ord:输入字符找该字符编码的位置,Unicode的位置

chr:输入位置数字找出其对应的字符,Unicode

ascii:是ascii码中的返回该值,不是就返回\u+该元素的unicode编码。

# ord 输入字符找该字符编码的位置
print(ord('a'))
print(ord('中'))

# chr 输入位置数字找出其对应的字符
print(chr(97))
print(chr(20013))

# 是ascii码中的返回该值,不是就返回\u4e2d
print(ascii('a'))
print(ascii('中'))

  

dict:创建一个字典。

set:创建一个集合。

frozenset:返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

len:返回一个对象中元素的个数。

 

reversed:将一个序列翻转,并返回此翻转序列的迭代器。

ite = reversed(['a',2,3,'c',4,2])
for i in ite:
    print(i) 

slice:构造一个切片对象,用于列表的切片。

制定一个却切片的变量,之后的都可以直接引用这个变量来切片
li = ['a','b','c','d','e','f','g']
sli_obj = slice(3)
print(li[sli_obj])

sli_obj = slice(0,7,2)
print(li[sli_obj]) 

sorted:对所有可迭代的对象进行排序操作。

与min和max一样,可接受key,按key来排序
l1 = [('a', 4), ('c', 2), ('d', 1),('b', 3), ]
print(sorted(l1, key=lambda x:x[1]))

  

enumerate:枚举,返回一个枚举对象。

all:可迭代对象中,全都是True才是True。

any:可迭代对象中,有一个True 就是True。

zip:(如同拉链)函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

 

l1 = [1,2,3,5,6,7]
tu1 = ('alex','太白', 'wusir', '女神')
dic = {'name': '日天', 'age':28, 'hobby': 'tea', 'weight':100}
# print(zip(l1,tu1,dic))
for i in zip(l1,tu1,dic):
    print(i)

  

filter:过滤·。

map:会根据提供的函数对指定序列做映射。

 

# filter返回的是迭代器
l1 = [i for i in range(10)]
def func1(x):
    return x % 2 == 0
print(list(filter(func1,l1)))

l1 = [1,2,3,4]
# print([i**2 for i in l1])
def func(x):
  return x**2
print(list(map(func,l1)))

  

 2.迭代器、生成器

 

range:函数可创建一个整数对象,一般用在 for 循环中。

next:内部实际使用了__next__方法,返回迭代器的下一个项目。

iter:函数用来生成迭代器(讲一个可迭代对象,生成迭代器)。

用while循环模拟for循环

s1 = iter([1, 2, 3, 4, 5])
while True:
    try:
        print(next(s1))
    except StopIteration:
        break

  

 3.作用域

globals:函数以字典的类型返回全部全局变量。

locals :函数会以字典的类型返回当前位置的全部局部变量。

a=2
def func1():
    b=1
    print(locals())
    print(globals())
func1()

  

 4.其他

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

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

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

 

s = '1+3-9'
print(eval(s))#返回结果

s1 = '''for i in range(3):
            print(i)'''
print(exec(s1))
exec(s1)#不返回结果

  

input:函数接受一个标准输入数据,返回为 string 类型。

print:打印输出。

id:获取对象的内存地址。

hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。 

print(hash('name'))
print(hash('name1'))
print(hash('fdsmkfghsdlksld'))
print(hash(1))
print(hash(100))#数字哈希仍旧是数字
print(hash([1,2,3]))#不可哈希

  

open:函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。

__import__:函数用于动态加载类和函数 。

help:函数用于查看函数或模块用途的详细说明。

callable:函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。

dir:函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

匿名函数

lambda :为了解决那些功能很简单的需求而设计的一句话函数。

三元运算可用于lambda
func = lambda x:x if x > 2 else x * 2

# 利用内置函数匿名函数 计算列表的每个数的2倍。
print(list(map(lambda x:x*2,[1,5,7,4,8])))
# 利用内置函数匿名函数将dic按照值进行排序。

print(sorted(dic.items(),key=lambda x:x[1]))

  

递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

例:

一个数的阶乘可以表示为:fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

  

 

posted @ 2018-08-22 16:30  一捅浆糊  阅读(146)  评论(0编辑  收藏  举报