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('') 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 == "":
LOGIN_USER['is_login'] = True
LOGIN_USER['current_user'] = user
manager() def main():
while True:
inp = input("1,后台管理;2,登录")
if inp == '':
manager()
elif inp == '':
username = input("请输入用户名")
pwd = input("请输入密码")
login(username, pwd) main()

Python笔记总结week4的更多相关文章

  1. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  2. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  7. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  8. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  9. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

随机推荐

  1. C# 调用存储过程操作 OUTPUT参数和Return返回值

    本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html 存储过程是存放在数据库服务器上的预先编译好的sql语句.使用存 ...

  2. Java 接口练习题

    中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口:Ce ...

  3. js实现css、addClass、removeClass和toggleClass

    JQuery中获取CSS样式css(name):访问第一匹配元素的样式属性css(name,value):在所有匹配的元素中,设置一个样式属性的值css(properties):把一个“名/值对”对象 ...

  4. 立即执行函数: (function(){...})() 与 (function(){...}()) 有什么区别?

    没有区别. function foo() {...} // 这是定义,Declaration:定义只是让解释器知道其存在,但是不会运行. foo(); // 这是语句,Statement:解释器遇到语 ...

  5. libevent源码分析:event_assign、event_new

    在libevent中,获取event类型对象的方法有两种,event_assign.event_new 1.event_assign() /** Prepare a new, already-allo ...

  6. Sqoop1.4.6配置和使用

    http://jingpin.jikexueyuan.com/article/39333.html http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide. ...

  7. 在Excel中制作复合饼图

    在Excel中插入饼图时有时会遇到这种情况,饼图中的一些数值具有较小的百分比,将其放到同一个饼图中难以看清这些数据,这时使用复合条饼图就可以提高小百分比的可读性. 文中的复合饼图只是方便以后记忆,故不 ...

  8. 一看便知_linux安装redis和调试

          rpm包下载地址:     http://vault.centos.org/6.3/os/x86_64/Packages/1.进入目录,解压文件 # tar  -zxvf  redis-3 ...

  9. 4.添加对efcore的支持 ,并使用mysql数据库。

    1.添加并加入 在project.json中添加 "tools": { "Microsoft.EntityFrameworkCore.Tools": " ...

  10. JDBC数据库连接池技术

    在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接.这样我们就不需要每次都创建连接.释放连接了,这些操作都交给了连接池. 用池的概念来管 ...