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,]

    • 内置

      • 输入输出

        • print
        • 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

补充

  1. 数据类型中的方法到底有没有返回值?

    • 无返回值

      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
  2. 函数内部的数据是否会混乱。
    • 函数内部执行相互之间不会混乱
    • 执行完毕 + 内部元素不被其他人使用 => 销毁

内容详细

  1. 函数中高级

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源码】
  1. 内置函数
  • 编码相关

    • 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,]
  1. 模块

将指定的 “字符串” 进行加密。

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的更多相关文章

  1. python笔记-12 redis缓存

    一.redis引入 1.简要概括redis 1.1 redis默认端口:6379 1.2 redis实现的效果:资源共享 1.3 redis实现的基本原理:不同的进程和一个公共的进程之间建立socke ...

  2. Python笔记 #12# Dictionary & Pandas: Object Creation

    Document of Dictionaries 10 Minutes to pandas tutorialspoint import pandas as pd data = [['Alex',10] ...

  3. 13.python笔记之pyyaml模块

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

  4. python笔记 - day7

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

  5. python笔记 - day5

    python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...

  6. python笔记之常用模块用法分析

    python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...

  7. python笔记之bisect模块

    python笔记之bisect模块 当你决定使用二分搜索时,这个模块会给你带来很大的帮助. 例子 import bisect L = [1,3,3,6,8,12,15] x = 3 #在L中查找x,x ...

  8. s21day22 python笔记

    s21day22 python笔记 一.内容回顾及补充 模块补充 importlib.import_module:通过字符串的形式导入模块 #示例一: import importlib # 用字符串的 ...

  9. guxh的python笔记一:数据类型

    1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...

随机推荐

  1. Spring Boot Shiro 使用教程

    Apache Shiro 已经大名鼎鼎,搞 Java 的没有不知道的,这类似于 .Net 中的身份验证 form 认证.跟 .net core 中的认证授权策略基本是一样的.当然都不知道也没有关系,因 ...

  2. 吴裕雄 python 神经网络——TensorFlow 数据集基本使用方法

    import tempfile import tensorflow as tf input_data = [1, 2, 3, 5, 8] dataset = tf.data.Dataset.from_ ...

  3. WLAN配置SKC

    1.关于SKC WLC支持粘滞密钥缓存(Sticky Key Caching,SKC). 通过SKC,客户端为其关联的每个AP接收并存储不同的PMKID. AP还维护发布给客户端的PMKID数据库. ...

  4. JS打开浏览器新窗口

    window.open(URL,name,features,replace); 参数 描述 URL 一个可选的字符串,声明了要在新窗口中显示的文档的 URL.如果省略了这个参数,或者它的值是空字符串, ...

  5. gym102220H 差分+树状数组(区间修改和输出)

    这题目很有意思,让我学会了树状数组的差分,更加深刻理解了树状数组 树状数组的差分写法 void add(int x,int k) { for (int i = x;i <= n;i += low ...

  6. FTP 上传下载 进度条

    11 /// <summary> /// 文件上传 /// </summary> /// <param name="filePath">原路径( ...

  7. redhat 7.6 流量监控命令、软件(3)nethogs 监控进程实时流量

    1.解压nethogs tar -zxvpf nethogs_0.8.5.orig.tar.gz 2.直接make,这里报错,提示pcap.h,安装libpcap就可以了 3.如果已经安装,还是报错, ...

  8. Plastic Sprayer Supplier - Sprayer: How Can The Product Be Sprayed?

    In many end products, especially in cosmetics, the first thing that appeals to consumers is the form ...

  9. java事务/springboot事务/redis事务

    java事务(数据库事务):jdbc事务--ACID springboot事务:@Transactional--ACID redis事务:命令集合 将redis事务与mysql事务对比:   Mysq ...

  10. MySql向SQLServer迁移常见问题

    -- MySql与SQLServer update inner join语法区别-- MySql: UPDATE A LEFT JOIN B ON A.B_ID = B.B_ID SET A.A_NA ...