python笔记12
day12
今日内容
- 函数中高级(闭包/高阶函数)
- 内置函数
- 内置模块(.py文件)
内容回顾
- 函数基础概念
- 函数基本结构
 def func(arg):
 return arg;
 v1 = func(123)
- 参数
- 写函数
- def func(a1,a2):pass
- def func(a1,a2=None):pass
- def func(*args,**kwargs):pass
 
- 执行函数
- 位置参数在前/关键字参数在后。
 
 
- 写函数
 
- 函数基本结构
- 函数小高级
- 函数可以做变量 
 def func():
 pass
 v1 = func
 v1()- v2 = [func,func,func]
 v2[1]()
 
- 函数可以做参数 
 def func(arg):
 v2 = arg()- def show():
 pass v1 = func(show)
 # 注意返回值
 
- Python中以函数为作用域 
 # 第一题
 for item in range(10):
 pass
 print(item)- # 第二题
 item = 10
 def func():
 for item in range(10):
 pass
 print(item)
 func() # 第三题
 item = 10
 def func():
 item = 2
 def inner():
 print(item)
 for item in range(10):
 pass
 inner()
 func() # 第四题【新浪微博】
 def func():
 for num in range(10):
 pass
 v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]
 result1 = v4[1]()
 result2 = v4[2]()
 print(result1,result2)
 func() # 第五题【新浪微博】
 def func():
 for num in range(10):
 pass
 v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]
 result1 = v4[1]()
 num = 73
 result2 = v4[2]()
 print(result1,result2)
 func()
 
- lambda表达式(匿名函数) 
 v = [lambda x:x=100,]
- 内置 - 输入输出
- input
 
- 强制转换
- int
- bool
- str
- list
- tuple
- dict
- set
 
- 数学相关
- max
- min
- sum
- abs
- divmod
- float
- pow
 v = pow(2,3)
 print(v)#8
 #幂次方计算
- round
 v = round(1.127,2)
 print(v)#1.13
 #保留小数位数
 
- 进制
- bin
- oct
- int
- hex
 
- 其他
- len
- range
- id
- type
- open
 
 
- 输入输出
 
补充
- 数据类型中的方法到底有没有返回值?
- 无返回值 
 v = [11,22,33]
 v.append(99) # 无返回值
- 仅有返回值: 
 v = "alex"
 result = v.split('l')- v = {'k1':'v2'}
 result1 = v.get('k1')
 result2 = v.keys()
 
- 有返回+修改数据 
 v = [11,22,33]
 result = v.pop()
- 常用需要记住 - str
- strip,返回字符串
- split,返回列表
- replace,返回字符串
- join,返回字符串。
 
- list
- append,无
- insert,无
- pop,返回要删除的数据
- remove,无
- find/index,返回索引的位置。
 
- dict
- get
- keys
- values
- items
 
 
- str
 
- 函数内部的数据是否会混乱。
- 函数内部执行相互之间不会混乱
- 执行完毕 + 内部元素不被其他人使用 => 销毁
 
内容详细
- 函数中高级
1.1 函数可以做返回值
def func():
    print(123)
def bar():
    return func
v = bar()
v()
name = 'oldboy'
def func():
    print(name)
def bar():
    return func
v = bar()
v()
def bar():
    def inner():
        print(123)
    return inner
v = bar()
v()
name = 'oldboy'
def bar():
    name = 'alex'
    def inner():
        print(name)
    return inner
v = bar()
v()
name = 'oldboy'
def bar(name):
    def inner():
        print(name)
    return inner
v1 = bar('alex') # { name=alex, inner }  # 闭包,为函数创建一块区域(内部变量供自己使用),为他以后执行提供数据。
v2 = bar('eric') # { name=eric, inner }
v1()
v2()
练习题
# 第一题
name = 'alex'
def base():
    print(name)
def func():
 	name = 'eric'
    base()
func() # {name=eric, }
# 第二题
name = 'alex'
def func():
 	name = 'eric'
    def base():
    	print(name)
    base()
func()
# 第三题
name = 'alex'
def func():
 	name = 'eric'
    def base():
    	print(name)
    return base
base = func()
base()
注意:函数在何时被谁创建?
面试题
info = []
def func():
    print(item)
for item in range(10):
    info.append(func)
info[0]()
info = []
def func(i):
    def inner():
        print(i)
	return inner
for item in range(10):
    info.append(func(item))
info[0]()
info[1]()
info[4]()
0
1
4
1.2 闭包
def func(name):
    def inner():
        print(name)
	return inner 
v1 = func('alex')
v1()
v2 = func('eric')
v2()
1.3 高阶函数
- 把函数当作参数传递
- 把函数当作返回值
注意:对函数进行赋值
1.4 总结
- 函数执行的流程分析(函数到底是谁创建的?)
- 闭包概念:为函数创建一块区域并为其维护自己数据,以后执行时方便调用。【应用场景:装饰器 / SQLAlchemy源码】
- 内置函数
- 编码相关
- chr,将十进制数字转换成 unicode 编码中的对应字符串。 
 v = chr(99)
 print(v)
- ord,根据字符在unicode编码中找到其对应的十进制。 
 num = ord('中')
 #20013
- 应用: 
 import random- def get_random_code(length=6):
 data = []
 for i in range(length):
 v = random.randint(65,90)
 data.append(chr(v)) return ''.join(data) code = get_random_code()
 print(code)
 import random # 导入一个模块 v = random.randint(起始,终止) # 得到一个随机数
 
 
- 高级一点的内置函数
- map,循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表中,并返回。 
 v1 = [11,22,33,44]
 result = map(lambda x:x+100,v1)
 print(list(result)) # py3中特殊,result是一个对象。通过list提取值。
- filter 
 v1 = [11,22,33,'asd',44,'xf']- def func(x):#过滤条件,真假表示。
 if type(x) == int:
 return True
 return False
 result = filter(func,v1) # [11,]
 print(list(result)) result = filter(lambda x: True if type(x) == int else False ,v1)
 print(list(result)) result = filter(lambda x: type(x) == int ,v1)
 print(list(result))
 
- reduce 
 import functools
 v1 = ['wo','hao','e']- def func(x,y):
 return x+y
 result = functools.reduce(func,v1)
 print(result) result = functools.reduce(lambda x,y:x+y,v1)
 print(result)
 
 
- 面试题:
- 常用的内置函数有哪些? 
- filter/map/reduce是什么意思? 
- 什么是匿名函数?(lambda表达式) 
 def func():
 pass- v = [lambda x:x+100,]
 
 
- 模块
将指定的 “字符串” 进行加密。
import hashlib
def get_md5(data):
    obj = hashlib.md5()
    obj.update(data.encode('utf-8'))
    result = obj.hexdigest()
    return result
val = get_md5('123')
print(val)
加盐(防止MD5撞库解密)
import hashlib
def get_md5(data):
    obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))#加盐
    obj.update(data.encode('utf-8'))
    result = obj.hexdigest()
    return result
val = get_md5('123')
print(val)
应用:
import hashlib
USER_LIST = []
def get_md5(data):
    obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
    obj.update(data.encode('utf-8'))
    result = obj.hexdigest()
    return result
def register():
    print('**************用户注册**************')
    while True:
        user = input('请输入用户名:')
        if user == 'N':
            return
        pwd = input('请输入密码:')
        temp = {'username':user,'password':get_md5(pwd)}
        USER_LIST.append(temp)
def login():
    print('**************用户登陆**************')
    user = input('请输入用户名:')
    pwd = input('请输入密码:')
    for item in USER_LIST:
        if item['username'] == user and item['password'] == get_md5(pwd):
            return True
register()
result = login()
if result:
    print('登陆成功')
else:
    print('登陆失败')
赠送:密码不显示(只能在终端运行)
import getpass
pwd = getpass.getpass('请输入密码:')
if pwd == '123':
    print('输入正确')
总结
- 自定义函数
- 基本函数结构(98%)
- 高级
- 参数
- 闭包
 
 
- 内置函数
- 模块
- random
- hashlib
- getpass
 
python笔记12的更多相关文章
- python笔记-12 redis缓存
		一.redis引入 1.简要概括redis 1.1 redis默认端口:6379 1.2 redis实现的效果:资源共享 1.3 redis实现的基本原理:不同的进程和一个公共的进程之间建立socke ... 
- Python笔记 #12# Dictionary & Pandas: Object Creation
		Document of Dictionaries 10 Minutes to pandas tutorialspoint import pandas as pd data = [['Alex',10] ... 
- 13.python笔记之pyyaml模块
		Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ... 
- python笔记 - day7
		python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ... 
- python笔记 - day5
		python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ... 
- python笔记之常用模块用法分析
		python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ... 
- python笔记之bisect模块
		python笔记之bisect模块 当你决定使用二分搜索时,这个模块会给你带来很大的帮助. 例子 import bisect L = [1,3,3,6,8,12,15] x = 3 #在L中查找x,x ... 
- s21day22 python笔记
		s21day22 python笔记 一.内容回顾及补充 模块补充 importlib.import_module:通过字符串的形式导入模块 #示例一: import importlib # 用字符串的 ... 
- guxh的python笔记一:数据类型
		1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ... 
随机推荐
- 思科室外AP无法注册到WLC
			思科的一些新的室外AP,在购买回来时,有时候会出现无法加入WLC的情况,现象基本是无法加入,或感觉加入了,立马又掉了. 例如: AIR-AP1562E-H-K9 AIR-AP1572EAC-H-K9 ... 
- oracle误操作表数据--回退(闪回)被提交后的数据
			// 查询该时间段 这个表的状态 (就是表状态正常的时刻 下面的时间仅用于举例) select * from 表名 as of timestamp to_timestamp('2019-09-26 1 ... 
- 子元素使用position:fixed,导致他的宽度不能和父元素保持一致的解决方案
			最近在编码过程中,遇到过这样一个问题,代码如下,我们有一个父级,他有一定的宽度,在他的里面有两个子级,其中一个是绝对定位的,且要求他们的宽度都和父级保持一致,然后问题就出现了,我们会发现,有了定位的s ... 
- 解决PLSQL 查询后显示中文为问号(???)问题
			我的问题已解决,在装oracle的服务器上配置了下面的两个环境变量后,重启服务器,重新录入中文,在查询即可正确显示中文. 原因: 本机(装oracle的服务器)没有配置数据库字符集环境变量,或是与数据 ... 
- Python开发个人专属表情包网站
			“表情包”是一种利用图片来表示感情的一种方式.表情包是在社交软件活跃之后,形成的一种流行文化,表情包流行于互联网上面,基本人人都会发表情. 曾经你是否也有过找不到表情包去应对别人的时候. 今天小编分享 ... 
- let const var 比较说明
			现在先来做两道练习题 for(var i=0;i<10;i++){ var a='a' let b = 'b' } console.log(a) console.log(b) for(var i ... 
- VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
			方案一: sudo vim /etc/sysctl.conf 增加下面内容(环境变量) fs.inotify.max_user_watches = 1638400 fs.inotify.max_use ... 
- MySQL之正则
			八:正则匹配: 语法: select * from 表名 where 字段名 regexp "正则表达式"; PS:MySQL中正则匹配,不能使用\w等字幕作为匹配 
- git——解决每次拉取、提交代码时都需要输入用户名和密码
			在开发中我们经常需要通过 git 对代码进行拉取和提交,频繁地输入用户名和密码会带来很大的麻烦,下面就介绍一下解决git每次拉取.提交代码时都需要输入用户名和密码的方法. 很简单,只要两步骤就能实现: ... 
- MAC97A6检测
