码迷,mamicode.com
首页 > 编程语言 > 详细

Python笔记总结week4

时间:2016-06-04 08:07:42      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:

 

1. Built-in functions

函数可能遇到的问题:下面例子函数改变了函数需要传入的参数
li = [11,22,33,44]

def f1(arg):
    arg.append(55)

f1(li)
print(li)    #打印结果为 [11,22,33,44,55]

检测传的值能不能调用: callable()
f2 = [1,2,3]
print(callable(f1))   #打印结果为True


chr(), ord()针对ASC码对应表的关系

r = chr(65)
o = ord("B")
print(r,o)      #打印结果为A,66


给一个范围,在范围里生成一个随机数字(随机验证码):
random.randrange()

import random
#生成6次循环
li = []
for i in range(6):
    temp = random.randrange(65,91)      #65<=temp<91
    c = chr(temp)
    li.append(c)
result = "".join(li)    #join只连接字符串
print(result)

#想要第三位数永远是数字
for i in range(5):
    r = random.randrange(0,5)
    if r ==2 and r==4:
        num = random.randrange(0,10)
        li.append(str(num))
    else:
        temp = random.randrange(65,91)      #65<=temp<91
        c = chr(temp)
        li.append(c)
result = "".join(li)    #join只链接字符串
print(result)

 

如何将字符串转换成python代码并执行:

#1.读取文件内容open,str到内存
#2. 将字符串转换成python代码 e.g compile
#3. 执行代码 e.g exec


#编译,single(单行),eval(表达式),exec(和python一模一样的)
s = "print(123)"
#将字符串编译成python代码
r = compile(s,"<string>","exec")     

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

#eval:字符串转表达式并且执行,获取结果为64
s = "8*8"
ret = eval(s)
print(ret)

#exec能执行所有python代码或字符串(内部编译再执行),然而eval只能执行表达式;不过eval多一个返回值功能


查看功能、读源代码

#快速查看一个对象给你提供了什么功能
print(dir(dict))

#读源码
print(help(list))

除法运算同时获得商和余数
#97条,一页10条,需要多少页
#dimod返回一个元组,包含商和余数
r = divmod(97,10)
print(r)
#也可以这样获取两个分开的结果
n1,n2 = divmod(97,10)
print(n1,n2)

判断对象是不是某个类的实例isinstance()

s = "Alex"  #"Alex"是对象,与类有关系
#dict,list是类
#对象是类的实例
#"Alex"是str的实例

#isinstance判断对象是不是某个类的实例
print(isinstance(s,str)) #打印结果为True


filter,map

#filter: 循环第二个参数,让每一个循环元素执行第一个参数(函数);如果函数返回值是True,表示元素合法
li = [11,22,33,44]

def f2(a):
    if a>22:
        return True

ret = filter(f2,li)     #第一个参数是函数,第二个参数是可迭代的对象
print(list(ret))    #打印结果为[33,44]

#lambda函数(也是定义函数一种方式):内部自动return
f1 = lambda a: a > 30
ret = f1(90)
print(ret)    #结果是True

result = filter(lambda a: a>33,li)
print(list(result))    #结果为[44]

#map函数将返回元素添加到结果中
#可以迭代的对象,可以for循环的东西
li = [11,22,33,44,55]#需求:每个元素加100
‘‘‘def f1(args):
    result = []
    for i in args:
        result.append(100+i)
    return‘‘‘
def f2(a):
    return a+100
result = map(f2,li)
print(list(result))

#用lambda表达式替代
result = map(lambda a: a+100,li)    #将返回值返回
r = filter(lambda a: a+100,li)   #将列表元素返回
print(list(result))
print(list(r))

 

其他built-in functions

#globals #代表所有全局变量
#locals  #代表所有局部变量

NAME = "Alex"
def show():
    a = 123
    print(locals())
    print(globals())
show()

#hash():python内部的转换
s = "ifeufgiue"
print(hash(s))

#len() in python3,既可以通过字符又可以通过字节查看长度
s = "李杰"
b = bytes(s, encoding = "utf-8")
len(b)
len(s)

li =[11,22,33,44]
a = max(li)    #最大值
b = min(li)    #最小值
c = sum(li)    #求和
print(a,b,c)

d = pow(2,10) #求指数,same as 2**10

#反转
li.reverse()
reversed(li)
print(li)

#round四舍五入
x = round(4.556)
print(x)

#slice
#sorted
li.sort()
sorted(li)
print(li)


#zip()
li = []

 

2. 关于Decorator

首先函数是可以赋值变量,将函数作为参数,或者将函数作为返回值。而Decorator本质就是将函数作为参数,并且返回函数的函数。

good to read: https://realpython.com/blog/python/primer-on-python-decorators/

关于一个函数的函数:

def f1():
    print(123)

def f2():
    print(456)

def f1():
    print(123)

def f2(xxx):
    xxx()

f2(f1)      #f2关于f1的函数是f1函数

 

为了更简洁、明了,python运用Sugar Syntax:@ + 函数名

可实现功能:
1. 自动执行outer函数并且将其下面的函数名f1当作参数传递
2. 将outer函数的返回值,重复赋值给 f1

def outer(func):
    def inner(*args, **kwargs):
        print(before)
        r = func(*args, **kwargs)
        print(after)
        return r
    return inner

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

@outer
def f2(a1, a2):
    print("F2")

@outer
def f3():
    print("F3")

 

只有outer函数被调用的时候f1才会被调用;Decorator返回inner函数,结果为被修饰过的f1函数:

def outer(func):
    def inner():
        print(log)
        return func()
    return inner

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

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

@outer
def f100():
    print("F100")


outer(f1()) #打印结果为log F1

 

运用Decorator的注册登录程序模版:

LOGIN_USER = {"is_login": False }

def outer(func):
    def inner(*args, **kwargs):
        if LOGIN_USER[is_login]:
            r = func()
            return r
        else:
            print("请登录")
    return inner

def outer1(func):
    def inner(*args, **kwargs):
        if LOGIN_USER[is_login] and LOGIN_USER[user_type] == 2:
            r = func()
            return r
        else:
            print("请登录,或者权限不够")
    return inner

@outer1
def order():
    print("欢迎%s登录" % LOGIN_USER[current_user])

@outer
def changepwd():
    print("欢迎%s登录" % LOGIN_USER[current_user])

@outer
def manager():
    print("欢迎%s登录" % LOGIN_USER[current_user])

def login(user, pwd):
    if user == "alex" and pwd == "123":
        LOGIN_USER[is_login] = True
        LOGIN_USER[current_user] = user
        manager()

def main():
    while True:
        inp = input("1,后台管理;2,登录")
        if inp == 1:
            manager()
        elif inp == 2:
            username = input("请输入用户名")
            pwd = input("请输入密码")
            login(username, pwd)

main()

 

Python笔记总结week4

标签:

原文地址:http://www.cnblogs.com/monicas/p/5539133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!