python基础篇【第四篇】内置函数、装饰器:

一、内置函数:

 

对于一些python中常用的函数,python自身就已经定义了一些函数用于调用,我们就叫它内置函数!如以下都是python中内置的函数!

 

一些常用的内置函数具体用法:

 

 

一些常用的内置函数具体用法:

1.abs();取绝对值

1 n=abs(-2)
2 print(n)
3 
4 结果:
5 2

 

2.all();传入可迭代的对象中,都为真才为真;

Fasle: 0,None,"",[],{} ,()都为假
True: 1,-1,True,有值返回真。

n=all([1,2,3," ",1,-1,True])
print(n)
#结果
True

 

3.any();传入可迭代的对象中,有一个为真就为真;

n=any([0,None,"",[],{} ,()]) #都为假
print(n)

#结果
False

 

4.bin();传入的十进制,转换成二进制;

n=bin(10)
print(n)

#执行结果
0b1010

 

5.oct();传入的十进制,转换成八进制;

1 n=oct(10)
2 print(n)
3 
4 执行结果
5 0o12

 

6.hex();传入的十进制,转换成十六进制;

1 n=hex(10)
2 print(n)
3 
4 执行结果
5 0xa

 

7.bytes() 把字符串转换成字节类型,需要指定编码  

其中: gbk编码:一个汉字占2个字节;

    utf8编码:一个汉字占3个字节;

1 n=bytes("hello",encoding="utf-8")
2 print(n)
3 
4 执行结果:
5 b'hello'

 

8.chr();把输入的数字,转换成Ascii码表中对应的字母;

n=chr(78)
print(n)
#执行结果

N

 

9.ord();把输入的字母,转换成Ascii码表中对应的数字;

n=ord("K")
print(n)
#执行结果
75

用chr和ord,可以写一个验证码如下:

 1 #随机生成一个6位验证码
 2 import random
 3 li=[]
 4 for i in range(6):
 5     r=random.randrange(0,5)
 6     if r ==2 or r==4:
 7         num=random.randrange(0,10)
 8         li.append(str(num))
 9     else:
10         n=random.randrange(65,91)  #从65到90 之间随机取出一个数字
11         c=chr(n)   #把数字转换成字母
12         li.append(c)
13 j="".join(li)   #字符串拼接,只能拼接字符
14 
15 print(j)

 

 

10.globals();获取所有的全局变量;

m=123

n=ord("K")
# print(n)
s=globals()
print(s)

#执行结果
{'__file__': 'D:/学习功课/s13/day4/内置函数.py', 

'__doc__': None, '__name__': '__main__',

'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000404B70>,
'__spec__': None, '__package__': None, 'li': [11, 22, 33, 44, 55],

'm': 123, '__cached__': None, 's': {...},

'n': 75, 'random': <module 'random' from 'C:\\Python\\Python35\\lib\\random.py'>,

'__builtins__': <module 'builtins' (built-in)>}

 

11.locals():获取所有局部变量

 1 def show(args,a):
 2     k=12
 3     v="wewe"
 4     for i in range(3):
 5         n=i
 6     print(locals())
 7 show("sss","2b")
 8 
 9 #执行结果
10 {'args': 'sss', 'a': '2b', 'k': 12, 'v': 'wewe', 'n': 2, 'i': 2}

 

12.hash值:

#hash值
dic = {"sadfasdfasdfasdfasdfasdf":1}
i = hash("sadfasdfasdfasdfasdfasdf")        #把一般字符串转成hash值
print(i)

 

13.compile():将字符串编译成python代码

  eval();可以把括号里面的字符串当成python执行,但只支持表达式且有返回值;

  exec()     执行,比eval要牛逼,因为exec可以执行任何Python代码,但eval只能执行表达式;但有个缺陷是eval有返回值,而exec没有。   

  exec可以执行compile编译过的,也可以接受代码执行。

  eval()      执行,把接受的字符串当做一个表达式,把代码编译成一行的表达式;

 1 name='print("hello world")'
 2 test=compile(name,'<string>','exec')
 3 print(test)
 4 
 5 #执行结果
 6 <code object <module> at 0x00000000006A1DB0, file "<string>", line 1>
 7 #可以用exec()来调用test
 8 exec(test)
 9 hello world
10 #也可以用eval()
11 eval(test)
12 hello world
#用eval()执行表达式是有返回值的
k=eval("2*8")
print(k)
#执行结果
16

 

14. callable():能否调用,能调用返回True,不能返回False;

def show():
    k=12
    v="wewe"
    for i in range(3):
        n=i
print(callable(show))

#执行结果
True

 

15. isinstance(s,类型)用来判断对象是否是类的实例;

print(isinstance("s",str))
#执行结果
True

 

16.filter()  筛选,内部循环第二个参数,让每一个元素执行,如果值返回为True,表示元素合法,将元素添加到结果中,否则不做操作;

def f2(a):
    if a>22:
        return True
li=[11,22,33,44,55]
ret=filter(f2,li)  #循环第二个参数,让每个循环元素执行 函数,如果函数值返回值True,表示元素合法,加到ret中
print(list(ret))
#执行结果:
[33, 44, 55]

#也可以用lambda表达式来运行
ret=filter(lambda a: a>22,li)
print(list(ret))

 

17.map(函数,可迭代的对象 ):  内部循环第二个参数,让每个元素执行,不加判断,返回值是什么就操作什么

li=[11,22,33,44,55]
mret=map(lambda a: a+200,li)
print(list(mret))
#执行结果
[211, 222, 233, 244, 255]

 

18.len()查看长度;

#在python3中文,默认是按字符查看
s="田杰"
print(len(s))
s="田杰"
b=bytes(s,encoding="utf-8")
print(len(b))
#执行结果
2
6
#也可以查看列表长度
li=[11,22,33,44,55]
#结果
5

 

19. max():最大值

li=[11,22,33,44,55]
n=max(li)
print(n)
#结果
55

 

20.min():最小值

li=[11,22,33,44,55]
m=min(li)
print(m)
#结果
11

 

21. sum():求和

num=[99,22,33]
k=sum(num)
#结果
154

 

22.pow() 求幂

>>> i1
18
>>> pow(i1,2)
324
>>> pow(i1,3)
5832

 

23.range()  范围,一般for循环用的比较多,for i in range(5),指循环5次;

for i  in range(5):
    print(i)
#结果
0
1
2
3
4

 

24.memoryview():python3中新添,查看内存地址相关的类

>>> name = b'daniel'
>>> name
b'daniel'
>>> id(name)
>>> memoryview(name)
<memory at 0x1019ee108>
>>> type(name)
<class 'bytes'>

 

25. reversed():反转,与列表中的反转一样

li=[11,22,33,44,55]
k=reversed(li)
print(list(k))
#执行结果
[55, 44, 33, 22, 11]

 

26. round():四舍五入

k=round(3.6)
print(k)

#结果
4

 

27.divmod():取商和余数

k=divmod(10,3)
print(k)
#结果
(3, 1)

 

28.sorted()  排序, 和列表、元组中的排序一样

>>> l2 = [5,22,4,2,55,23,]
>>> sorted(l2)
[2, 4, 5, 22, 23, 55]

 

29.slice()  切片,和字符串、列表中的切片一样

>>> l1
[1, 2, 3, 4, 5]
>>> l1[1:5]  #这个效果和下面实现的是一样的
[2, 3, 4, 5]
>>> l1.__getitem__(slice(1,5,None))
[2, 3, 4, 5]
#还可以调整步长
>>> l1.__getitem__(slice(1,5,2))
[2, 4]
>>> l1.__getitem__(slice(1,5,1))
[2, 3, 4, 5]
>>> l1.__getitem__(slice(0,5,1))
[1, 2, 3, 4, 5]
>>> l1.__getitem__(slice(0,5,1))

 

30.zip():合并,如把多个列表中的每个元素合并成一个元组:

li=[1,2,3,7,8]
a=["w","e","r","t","y",]
print(list(zip(li,a)))
#结果
[(1, 'w'), (2, 'e'), (3, 'r'), (7, 't'), (8, 'y')]
##如果元素长度不一样,会忽略
>>> c = [5,4,3,2]
>>> print(tuple(zip(a,c)))
((1, 5), (2, 4), (3, 3), (4, 2))

 

二、装饰器

  在python中一切皆对象,对于函数也是一样的,也可以把一个函数赋值给某个变量,因此函数可以像变量一样被指向和传递;

下面用实例可以更加形象的描述:

装饰器就是为了在调用一个函数之前或之后,再调用另一个程序

注意:是在不能修改原程序的情况下,因为要遵循“开放封闭原则”

 

装饰器:
def outer(func):
    def inter(arg):
        print("before")
        func(arg)
    return inter

@outer
def f1(name):
    print("F1 %s" %name)
     调用装饰器:@+函数名
     功能:
             1.自动执行outer函数并且将其下面的函数名f1当做参数传递
             2.将outer函数的返回值,重新赋值f1   (outer返回值就是inter,现在f1就重新赋值给了inter整个函数)

 

给函数传递参数,并函数有返回值的情况;

def outer(func):
    def inter(*args,**kwargs):
        print("before")
        r=func(*args,**kwargs)
        print("hello")
        return r
    return inter
@outer
def f1(a):
    print(a)
    return "屌丝!"

@outer
def f2(a1,a2):
    print("F2",a1,a2)
    return "臭屌丝!!!"

test=f1(1111)
print(test)

test2=f2(222,333)
print(test2)

#结果
before
1111
hello
屌丝!

before
F2 222 333
hello
臭屌丝!!!

 

posted @ 2016-05-31 22:38  也敲寡妇门  阅读(244)  评论(0编辑  收藏  举报