Python基础知识_Day12_函数中高级

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)::
      • 执行函数
        • 位置参数在前 关键字参数在后
    • 函数小高级

      • 函数可以做变量

        def func():
            pass
        v1 = func
        

v1()

  v2 = [func,func,func]
  v2[1]()
  ```
  
- 函数可以做参数

  ```python
  def func(arg):
      v2 = arg()
  
  def show():
      pass
  
  v1 = func(show)
  #注意返回值
  ```

- python中以函数为作用域

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

- lambda表达式

- 内置函数

  - 输入输出
  - 强制转换
  - 数学相关
  - 进制相关
  - 其他
  • 函数内部的数据是否会混乱

    • 函数内部执行相互不混乱
    • 执行完毕 + 内部元素不被其他使用 —>>销毁

内容详细

1、函数中高级

1.1 函数可以做返回值

def func():
    print(123)
    
def bar():
    return func

v= bar()
v()
name = '武藤兰'
def func():
    print(name)
    
def bar():
    return func

v= bar()
v()
def bar():
    def inner():
        print(123)
    return inner
v= bar()
v()
name = '加藤鹰'
def bar():
    name = '苍井空'
    def inner():
        print(123)
    return inner
v= bar()
v()
name = '加藤鹰'
def bar(name):
    def inner():
        print(123)
    return inner
v1 = bar('武藤兰') #{name=武藤兰, inner} #闭包,为函数创造一块区域(内部变量供自己使用),为他以后执行提供数据
v2 = bar('苍井空') #{name=苍井空, inner}
v1()
v2()

练习题

# 第一题
name = 'alex'
def base():
    print(name)
    
def func():
    name = 'eric'
    base()
func()

# 第二题
name = 'alex'
def func():
    name = 'eric'
    def base():
        print(name)
    base()
func()

# 第三题
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]()

1.2 闭包

def fucn(name):
    
    def inner():
        print(name)
    return inner

v1 = func('alex')
v1()
v2 = func('eric')
v2()

1.3 高阶函数

  • 对函数进行赋值
  • 把函数当做参数传递
  • 把函数当做返回值

1.4 总结

  • 函数执行的流程分析(函数到底是谁创建的?画图理解)
  • 闭包的概念:为函数创建一块区域保留并为其维护自己数据,以后执行时方便调用。
  • 闭包的应用场景:装饰器,SQLAichemy源码

2、内置函数

  • 编码相关

    • chr 将十进制数字转换成Unicode编码中的对应字符

      v = chr(99)
      print(v)
      
    • ord 根据字符在Unicode编码中找到其对应的十进制

      num = ord('中国')
      print(num)
      
    • 应用(随机验证码)

      import random #导入模块
      
      def get_random_code(length=6):
          data = []
          for i in range(6):
              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]
        # result = map(函数,可迭代对象) 循环对可迭代对象进行函数
        result = map(lambda x:x+100,v1) 
        print(result) #[111,122,133] py2直接展现列表
        print(list(result)) #py3特殊,对象object
        
      • filter , 过滤

        v1 = [11,22,33,'小萝莉',44,'御姐']
        # result = filter(函数,可迭代对象)
        def func(x):
            if type(x) == int:
                return True
            return False
        result = filter(func,v1)
        print(list(result))
        
        # lambda表达式实现 方法一
        result = filter(lambda x:True if type(x) == int else False,v1)
        print(list(result))
        
        # lambda表达式实现 方法二
        import functools
          
        v1 = [1,2,3,4,5,6]
        def func(x,y):
            retunr x + y
          
        result = functools.reduce(func,v1)
        print(result)
          
        # lambda表达式实现
        import functools
        result = functools.reduce(lambda x,y:x+y,v1)
        print(result)
        

      lambda表达式实现 方法二

      result = filter(lambda x:type(x) == int ,v1)
      print(list(result))

      
      - reduce
      
      ```python
      import functools
      
      v1 = [1,2,3,4,5,6]
      def func(x,y):
        retunr x + y
      
      result = functools.reduce(func,v1)
      print(result)
      
      # lambda表达式实现
      import functools
      result = functools.reduce(lambda x,y:x+y,v1)
      print(result)
      
    • 面试题:

      • 你常用的内置函数有哪些?

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

      • 什么是匿名函数?

        def func():
          pass
        
        lambda x:x+100
        

3、模块

将制定的‘字符串’进行加密

import hashlib

obj = hashlib.md5()
obj.update('要加密的字符串'.encode('utf-8')) #py3需要转码
result = obj.hexdigest()
print(result)

加盐

import hashlib

obj = hashlib.md5('dasdsada'.encode('utf-8')) #加盐,将这段字符串和要加密的字符串一起加密
obj.update('要加密的字符串'.encode('utf-8')) #py3需要转码
result = obj.hexdigest()
print(result)

案例:

import hashlib
USER_LIST[]
def get_md5(data):
    obj = hashlib.md5('dasdsada'.encode('utf-8')) 
    obj.update('data'.encode('utf-8')) #py3需要转码
    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('请输入密码')
print(pwd)

总结

  • 自定义函数
    • 基本函数结构
    • 高级
      • 参数
      • 闭包
  • 内置函数
  • 模块
    • random
    • hashlib
    • getpass

本周作业

1、学习笔记填充:md文件

2、思维导图:png文件

3、每日作业

你可能感兴趣的:(Python,python)