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. html 标签 frame

    html 标签 frame 对于html标签,一般都是在<html>标签对里包着<head>标签对和<body>标签对,body元素定义文档的主体,包含文档的所有内 ...

  2. 以太坊执行miner.start返回null终极解决方案

    参考博文:https://blog.csdn.net/wo541075754/article/details/79260040

  3. 卷积神经网络(CNN)_相关知识

    斯坦福公开课 CS231n Convolutional Neural Networks for Visual Recognition : http://cs231n.stanford.edu/syll ...

  4. struct和class定义类的区别

    (1)struct定义的类.struct定义的类,其方法和属性都是公有的(public).因此,外部可以直接访问其内部数据. (2)class定义的类.class定义的类,默认情况下是私有的(priv ...

  5. Jenkins 定时备份插件 ThinBackup

    需求 公司的整个测试环境正式环境打包都是用的同一个Jenkins, 该Jenkins是搭建在内部的一台机器上,之前有一台机器的硬盘出了问题,为了安全起见,我们决定备份 Jenkins 的配置和数据. ...

  6. SQL SERVER 2005还原差异备份、日志备份 2012-03-29 11:43

    其实要备份,还原最安全最有保障的是完全备份.但是完全备份肯定是需要更多的磁盘空间的开销.尤其是数据量比较大的.比如基数是500M,每天的增长量为10M,那么第一次完全备份是500M,第二次是510M, ...

  7. JS经典理解例子

    1. var name = 'the window'; var obj = { name:"my obj", getNameFunc:function(){ return func ...

  8. Python基础-4 运算符

    运算符 运算符:以1 + 2为例,1和2被称为操作数,"+" 称为运算符. Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 ...

  9. sprintf 、vsprintf 、_vsntprintf

    转载:https://blog.csdn.net/anye3000/article/details/6593551 sprintf函数的定义为: int sprintf(char *szBuffer, ...

  10. 在Centos上安装Postgre SQL

    检查PostgreSQL 是否已经安装 rpm -qa | grep postgres 检查PostgreSQL 是否已经安装 rpm -qal | grep postgres 检查PostgreSQ ...