python 基础 day4

内置函数:

callable()

检查f1能否被调用 能返回True

def f1():
  pass
print(callable(f1))

chr()

返回整数i对应的ASCII字符。与ord()作用相反。

参数x:取值范围[0, 255]之间的正数。

import random

i = random.randrange(65,91) #65-91随机数
c = chr(i)
print(c)
Z

b = ord("A")
print(b)

65

小程序,随机生成验证码:

for i  in range(6):
     r = random.randrange(0,5)
     if r == 2 or r == 4:
         num = random.randrange(0,10)
         li.append(str(num))
     else:
         temp = random.randrange(65,91) #随机生成验证码
         c = chr(temp)
         li.append(c)
a = "".join(li) #拼接 元素必须都是字符串
print(a)
 

 

1、读取文件内容open,str到内存

2、python,把字符串>===编译,解释代码

3、执行代码

compile() #将字符串编译成python代码

exec()     #执行 python代码接收:代码或字符串,没有返回值

eval()     #执行 把字符串转换表达式,有返回值,只能执行表达式

#编译, single单行,eval表达式,exec跟python一样的东西
s = "print(123)"     
#将字符串编译成python代码
r = compile(s,"<string>","exec") #要么是<string> 要么是文件名,不能省略,此处的exec和执行的exec没有联系,只表示用exec编译
#执行
exec(r) #没有返回值拿不到结果
s = "8*8"
ret = eval(s)    #把字符串转成表达式并执行,只能执行表达式,有返回值 ret
print(ret)

dir()    #查看获取功能

help()  #功能详细

print(dir(dict)) 

help(dict)  

divmod()

divmod(a,b)方法返回的是a//b(除法取整)以及a对b的余数

返回结果类型为tuple

参数:

a,b可以为数字(包括复数)

r = divmod(97,10)       #97条,每页显示10条,需要多少页 97 除以10
print(r)
(9, 7)    #得9 余7
n1,n2 = divmod(97,10)   #赋值给n1,n2(可以这样用)

isinstance()

在Python中可以使用type()与isinstance()这两个函数判断对象类型,而isinstance()函数的使用上比type更加方便。

区别:就是对于subclass之类的 type就不行了,所以,强烈建议不要使用type判断对象类型。

s = "QL"
r = isinstance(s,str) #判断对象是否是某个类的实例
pint(r)
True

s = "QL"
r = isinstance(s,list) #判断对象是否是某个类的实例
pint(r)
False

 

filter(函数,可迭代的对象)

Python内建的filter()函数用于过滤序列。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

filter 内部,循环第二个参数,循环内部执行第一个参数

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

def is_odd(n):
  return n % 2 == 1
 
filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
# 结果
[1, 5, 9, 15]

把一个序列中的空字符串删掉,可以这么写:

def not_empty(s):
  return s and s.strip()
 
filter(not_empty, ['A', '', 'B', None, 'C', ' '])
# 结果
['A', 'B', 'C']

 

lambda表达式

f1 = lambda a: a>30      #lambda自动return
ret = f1(90)
print(ret)      #返回True

li = [11,22,33,44,55,]
result = filter(lambda a: a>30,li)   #返回的是True就添加到result,简单的函数就用lambda

print(list(result))
#结果
[33, 44, 55]

  li = [11,22,33,44,55]

  result = map(lambda a:a+100,list(filter(lambda a:a>33,li)))

  print (list(result))

  [144, 155]

map()

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

map()传入的第一个参数是f,即函数对象本身:

def f(x):
    return x*x

result = map(f,[1,2,3,4,5,6,7,8,])
print(result)
# 结果
[1, 4, 9, 16, 25, 36, 49, 64]

把这个list所有数字转为字符串:

result = map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(result)
#结果
['1', '2', '3', '4', '5', '6', '7', '8', '9']

locals()  #局部变量

gloabals() #全局变量

locals 是只读的,globals 不是

NAME = "QL"

def show():
    a = 123
    b = 123
    
    print(locals())  #局部变量
    print(globals())  #全局变量
    
show()

#结果
{'b': 123, 'a': 123}
{'show': <function show at 0x0000000000D8E488>, '__name__': '__main__', '__doc__': None, 'NAME': 'QL', '__cached__': None, '__file__': 'C:/Users/qinling/PycharmProjects/s13/day3/test2.py', '__spec__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000006A5C18>, '__builtins__': <module 'builtins' (built-in)>}

hash() 

将字符串转成哈希值存在内存中,一般用于字典的key来保存

s = "sdfsdfsdfsffff"

print(hash(s)) 

len()

len()
s = "李杰"
print(len(s)) #python3默认按字符计算结果是2,python2只能按字节查看结果是6
2    

b = bytes(s,encoding='utf-8') #python3按字节查看 需转换一下
print(b)
6

max() #最大

r = max([11,22,33,1])
print(r)
#输出
33

min() #最小

sum() #求和

#sum是python中一个很实用的函数,但是要注意它的使用,我第一次用的时候,就把它这样用了:
s = sum(1,2,3)
#结果就悲剧啦
#其实sum()的参数是一个list
#例如:
sum([1,2,3])
sum(range(1,11))

#还有一个比较有意思的用法
a = range(1,11)
b = range(1,10)
c =  sum([item for item in a if item in b])
print c

#输出:
45

memoryview()# 内存地址相关的

object()# 是所有类的父类

reversed() #反转

li = [11,22,]

li.reverse()
 print(li)

a = reversed(li)  #两种方法效果是一样的
print(list(a))

sort()

li.sort() #排序 和下面的效果一样
print(sorted(li))

zip()

zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。

l1 = ["how",11,22,33,]
l2 = ["are",11,22,33,]
l3 = ["you",11,22,33,]

re = zip(l1,l2,l3)
print(list(re))

#结果
[('how', 'are', 'you'), (11, 11, 11), (22, 22, 22), (33, 33, 33)]

l1 = ["how",11,22,33,]
l2 = ["are",11,22,33,]
l3 = ["you",11,22,33,]

re = zip(l1,l2,l3)

temp = list(re)[0]
print(temp)

ret = ' '.join(temp)

print(ret) 

#结果

['how', 'are', 'you']

how are you

 需要掌握的内置函数

装饰器

(最常用在权限验证)

在函数外部修改,之前或之后

理解:

 

def f1():
    print(123)

def f2(xxx):
    xxx()
    
f2(f1)         #f1代表f1函数整体 xxx()也代表函数整体,函数可以作为参数传递。

@+函数名,放在某个函数上面,具有的功能:

1、自动执行outer函数并且将它下面的函数名f当做参数传递

2、将outer函数的返回值重新赋值给f

3、一旦被装饰装饰,下面的函数被重新赋值,执行装饰函数的内部函数。

p1.py

def outer(func):
    def inner():
        print("log")
        func()
        return func()    #func 代指 f2函数   func=f1 func()执行f1函数
    return inner         #inner作为函数整体返回

@outer
def f2():
    print("f2")

@outer
def f1():
    print("f1")

p2.py
import p1
p1.f2()

#结果
log
f2

可以传多个参数:

p3.py

def outer(func):
    def inner(*args,**kwargs):
        print("before")
        r = func(*args,**kwargs)
        print("after")
        return r          #func 代指 f1函数   func=f1 func()执行f1函数
    return inner 

@outer
def f1(arg):
    print(arg)
    return "hello"

    
p4.py

import p3

p3.f1("haha")


#运行p4.py结果
before
haha
after
'hello'

 

 

 

补充:

shutil 模块用法:

import shutil
shutil.copy('userfile.txt', 'file1.txt') #拷贝文件

 

posted on 2016-05-30 19:21  QinLing  阅读(233)  评论(0编辑  收藏  举报

导航