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()

      1. v2 = [func,func,func]
      2. v2[1]()
    • 函数可以做参数

      def func(arg):

      v2 = arg()

      1. def show():
      2. pass
      3. v1 = func(show)
      4. # 注意返回值
    • Python中以函数为作用域

      # 第一题

      for item in range(10):

      pass

      print(item)

      1. # 第二题
      2. item = 10
      3. def func():
      4. for item in range(10):
      5. pass
      6. print(item)
      7. func()
      8. # 第三题
      9. item = 10
      10. def func():
      11. item = 2
      12. def inner():
      13. print(item)
      14. for item in range(10):
      15. pass
      16. inner()
      17. func()
      18. # 第四题【新浪微博】
      19. def func():
      20. for num in range(10):
      21. pass
      22. v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]
      23. result1 = v4[1]()
      24. result2 = v4[2]()
      25. print(result1,result2)
      26. func()
      27. # 第五题【新浪微博】
      28. def func():
      29. for num in range(10):
      30. pass
      31. v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]
      32. result1 = v4[1]()
      33. num = 73
      34. result2 = v4[2]()
      35. print(result1,result2)
      36. 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')

      1. v = {'k1':'v2'}
      2. result1 = v.get('k1')
      3. 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 函数可以做返回值

  1. def func():
  2. print(123)
  3. def bar():
  4. return func
  5. v = bar()
  6. v()
  7. name = 'oldboy'
  8. def func():
  9. print(name)
  10. def bar():
  11. return func
  12. v = bar()
  13. v()
  14. def bar():
  15. def inner():
  16. print(123)
  17. return inner
  18. v = bar()
  19. v()
  20. name = 'oldboy'
  21. def bar():
  22. name = 'alex'
  23. def inner():
  24. print(name)
  25. return inner
  26. v = bar()
  27. v()
  28. name = 'oldboy'
  29. def bar(name):
  30. def inner():
  31. print(name)
  32. return inner
  33. v1 = bar('alex') # { name=alex, inner } # 闭包,为函数创建一块区域(内部变量供自己使用),为他以后执行提供数据。
  34. v2 = bar('eric') # { name=eric, inner }
  35. v1()
  36. v2()

练习题

  1. # 第一题
  2. name = 'alex'
  3. def base():
  4. print(name)
  5. def func():
  6. name = 'eric'
  7. base()
  8. func() # {name=eric, }
  9. # 第二题
  10. name = 'alex'
  11. def func():
  12. name = 'eric'
  13. def base():
  14. print(name)
  15. base()
  16. func()
  17. # 第三题
  18. name = 'alex'
  19. def func():
  20. name = 'eric'
  21. def base():
  22. print(name)
  23. return base
  24. base = func()
  25. base()

注意:函数在何时被谁创建?

面试题

  1. info = []
  2. def func():
  3. print(item)
  4. for item in range(10):
  5. info.append(func)
  6. info[0]()
  7. info = []
  8. def func(i):
  9. def inner():
  10. print(i)
  11. return inner
  12. for item in range(10):
  13. info.append(func(item))
  14. info[0]()
  15. info[1]()
  16. info[4]()
  17. 0
  18. 1
  19. 4

1.2 闭包

  1. def func(name):
  2. def inner():
  3. print(name)
  4. return inner
  5. v1 = func('alex')
  6. v1()
  7. v2 = func('eric')
  8. v2()

1.3 高阶函数

  • 把函数当作参数传递
  • 把函数当作返回值

注意:对函数进行赋值

1.4 总结

  • 函数执行的流程分析(函数到底是谁创建的?)
  • 闭包概念:为函数创建一块区域并为其维护自己数据,以后执行时方便调用。【应用场景:装饰器 / SQLAlchemy源码】
  1. 内置函数
  • 编码相关

    • chr,将十进制数字转换成 unicode 编码中的对应字符串。

      v = chr(99)

      print(v)

    • ord,根据字符在unicode编码中找到其对应的十进制。

      num = ord('中')

      #20013

    • 应用:

      import random

      1. def get_random_code(length=6):
      2. data = []
      3. for i in range(length):
      4. v = random.randint(65,90)
      5. data.append(chr(v))
      6. return ''.join(data)
      7. code = get_random_code()
      8. print(code)
      9. import random # 导入一个模块
      10. 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']

      1. def func(x):#过滤条件,真假表示。
      2. if type(x) == int:
      3. return True
      4. return False
      5. result = filter(func,v1) # [11,]
      6. print(list(result))
      7. result = filter(lambda x: True if type(x) == int else False ,v1)
      8. print(list(result))
      9. result = filter(lambda x: type(x) == int ,v1)
      10. print(list(result))
    • reduce

      import functools

      v1 = ['wo','hao','e']

      1. def func(x,y):
      2. return x+y
      3. result = functools.reduce(func,v1)
      4. print(result)
      5. result = functools.reduce(lambda x,y:x+y,v1)
      6. print(result)
  • 面试题:
    • 常用的内置函数有哪些?

    • filter/map/reduce是什么意思?

    • 什么是匿名函数?(lambda表达式)

      def func():

      pass

      1. v = [lambda x:x+100,]
  1. 模块

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

  1. import hashlib
  2. def get_md5(data):
  3. obj = hashlib.md5()
  4. obj.update(data.encode('utf-8'))
  5. result = obj.hexdigest()
  6. return result
  7. val = get_md5('123')
  8. print(val)

加盐(防止MD5撞库解密)

  1. import hashlib
  2. def get_md5(data):
  3. obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))#加盐
  4. obj.update(data.encode('utf-8'))
  5. result = obj.hexdigest()
  6. return result
  7. val = get_md5('123')
  8. print(val)

应用:

  1. import hashlib
  2. USER_LIST = []
  3. def get_md5(data):
  4. obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
  5. obj.update(data.encode('utf-8'))
  6. result = obj.hexdigest()
  7. return result
  8. def register():
  9. print('**************用户注册**************')
  10. while True:
  11. user = input('请输入用户名:')
  12. if user == 'N':
  13. return
  14. pwd = input('请输入密码:')
  15. temp = {'username':user,'password':get_md5(pwd)}
  16. USER_LIST.append(temp)
  17. def login():
  18. print('**************用户登陆**************')
  19. user = input('请输入用户名:')
  20. pwd = input('请输入密码:')
  21. for item in USER_LIST:
  22. if item['username'] == user and item['password'] == get_md5(pwd):
  23. return True
  24. register()
  25. result = login()
  26. if result:
  27. print('登陆成功')
  28. else:
  29. print('登陆失败')

赠送:密码不显示(只能在终端运行)

  1. import getpass
  2. pwd = getpass.getpass('请输入密码:')
  3. if pwd == '123':
  4. 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. 服务器(2)——IIS(2)——IIS Express(1)——IIS跟IIS Express之间的区别和关系

    在早期开发.NET WEB应用的时候,是需要为应用项目配置一个IIS下的虚拟应用(VS会自动配置,也可以手工指定),但这个要求操作系统必须支持IIS并且安装IIS(WINDOWS 7 HOME版本是不 ...

  2. ipfs camp course c demo exercise 1

    目录 aim: my bugs 解决ipfs 的 cros 问题的方法 result final code for c1 aim: 首先咱们把 broswer 和 自己的api 连接起来(要显示出来自 ...

  3. SpringMvc 项目配置

    spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&quo ...

  4. MySQL数据库备份还原

    本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式 将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.2 ...

  5. MySQL高级-索引1

    1.索引是什么 索引(Index)是帮助MySQL高效获取数据的数据结构.可以得到索引的本质:索引是数据结构. 可以理解为“排好序的快速查找数据结构” 在数据之外,数据库系统还维护着满足特定查找算法的 ...

  6. 2.1 MySQL基础使用

    本文是课上资料的总结非原创没有转载地址 目录 引言 为什么需要数据库? 数据库和应用程序的关系 MySQL基础使用 一.数据库简介 1.1 简介 1.2 常见数据库管理系统 1.3 MySQL卸载 1 ...

  7. 已知空间两点组成的直线求线上某点的Z值

    已知空间两点组成的直线求线上某点的Z值,为什么会有这种看起来比较奇怪的求值需求呢?因为真正三维空间的几何计算是比较麻烦的,很多时候需要投影到二维,再反推到三维空间上去. 复习下空间直线方程:已知空间上 ...

  8. day3-1函数

    函数: 如果写在对象内,是一个方法 函数声明 function 函数名(形参列表){ //函数体 } 函数表达式 var 函数名 = function  (形参列表){ //函数体 } 匿名函数  f ...

  9. Mybatis的逆向工程以及Example的实例函数及详解

    Mybatis-generator是Mybatis的逆向工程  (根据数据库中的表生成java代码) Mybatis的逆向工程会生成实例及实例对应的example,example用于添加条件,相当于w ...

  10. lua叠代器

    注意:叠待值遇到nil就退出 叠代器,是符合for遍历框架,需要满足条件 1-叠代函数,常量,控制变量 2-叠代函数可以接受二个参数,当然也可以忽略处理(利用闭包封装参数作为控制变量和状态变量) 无状 ...