高阶函数

# 1.把一个函数当做另一个函数的返回值
def test():print('我是test函数')return 'hello'def demo():print('我是demo函数')return testdef bar():print('我是bar函数')return test()# x = test()
# print(x)
#
# y = demo()  # y是test函数
# print(y)
# z = y()
# print(z)a = bar()
print(a)# 2.把一个函数当做另一个函数的参数,lambda表达式的使用
# sort filter map reduce
# 3.在函数内部再定义一个函数

函数的嵌套

def outer(x):m = 100  #局部变量print('我是outer函数')def inner():  # inner函数是定义在outer函数内部的一个函数print('我是inner函数')if x > 18:inner()return 'hello'outer(121)# print(m)
# inner()

闭包的概念

# 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)def outer():x = 10   #  在外部函数里面定义了一个变量x,是一个局部变量def inner():# 在内部函数如何修改外部函数的局部变量nonlocal x  # 此时,这里的x不再是新增的变量,而是外部的局部变量xy = x + 1x = 20print(y)print(x)print(x)return innerouter()()

计算一段代码的执行时间

import time #time模块可以获取时间# 代码运行之前,获取一下时间
start = time.time() #time模块里的time方法,可以获取当前时间的时间戳
print(start)
x = 0for i in range(1, 100000000):x += iprint(x)stop = time.time()print(stop)
print('用了', stop - start)# 代码运行完成以后,再获取一下时间

优化计算时间的代码

import time #time模块可以获取时间
def cal_time(fn):start = time.time()fn()end = time.time()print('代码运行耗时{}秒'.format(end - start))def demo():x = 0for i in range(1, 100000000):x += iprint(x)cal_time(demo)def foo():print('hello')time.sleep(3)print('world')cal_time(demo)
cal_time(foo)# start = time.time()
# x = 0
#
# for i in range(1, 100000000):
#     x += i
#
# print(x)
#
# stop = time.time()
#
# print(stop)
# print('用了', stop - start)

装饰器的使用

import timedef cal_time(fn):print('我是外部函数,我被调用了')print('fn = {}'.format(fn))def inner():start = time.time()fn()end = time.time()print('代码耗时', end - start)return inner@cal_time  #第一件事调用cal_time;第二件事把被装饰的函数传递给fn
def demo():x = 0for i in range(1, 100000000):x += iprint(x)# 第三件事:当再次调用demo函数时,此时的demo函数已经不再是上面的demo了
# 而是装饰器的返回值inner函数print('装饰后的demo = {}'.format(demo))
demo()   #此时就是inner函数了@cal_time
def foo():print('hello')time.sleep(3)print('world')demo()
foo()

装饰器的详解

import timedef cal_time(fn):def inner(m, *args, **kwargs):start = time.time()s = fn(m)end = time.time()print('代码耗时', end - start)return s, end - startreturn inner@cal_time
def demo(n):x = 0for i in range(1, n):x += ireturn xm = demo(100000000, 'good', p='hello')
print(m)

装饰器的使用

# 产品经理:提需求 / 改需求
# 超过22点就不可以玩游戏,不告诉时间就不让玩
# 开放封闭原则def can_play(fn):def inner(name, game, *args, **kwargs):# print(args)clock = kwargs.get('clock', 23)if clock <= 22:fn(name, game)else:print('太晚,快睡')return inner@can_play
def play_game(name, game):print('{}正在玩{}'.format(name, game))play_game('zhangsan', 'wangzherongyao', m='good', n='hello')
play_game('lisi', 'juediqiusheng', clock=16)

导入模块的语法

# 模块:一个py文件,就可以理解为一个模块
# 不是所有的py文件都可以作为模块导入
# 如果想要一个py文件能够被导入,模块名字必须要遵循命名规则(数字字母下划线组成,不能以数字开头)
# 为了方便开发,提供了很多内置模块import time  # 1.使用import模块名直接导入一个模块# 导入这个模块以后,就可以使用这个模块里的方法和变量
print(time.time())
# time.sleep(3)from random import randint  # 2.form模块名import函数名,导入一个模块里的方法或者变量randint(0, 2)  # 生成[0, 2]的随机整数from math import *  # 3.from 模块名import * 导入这个模块里的所有方法和变量print(pi)import datetime as dt  # 4.导入一个模块并起个别名print(dt.MAXYEAR)from copy import deepcopy as dp  # 5.from 模块名 import 函数名 as 别名dp(['hello', 'good', [1, 2, 3], 'hi'])

os模块介绍

# os全称 operationSystem 操作系统
# 模块是用来调用操作系统里面的方法的
import os# os.name ==> 获取操作系统的名字  Windows系列 ==>  /  非windows ==>posix
print(os.name)  # nt
print(os.sep)  # 路径的分隔符  windows==>\  非windows==>/# os模块里的 path 经常会使用
# abspath获取文件的绝对路径
print(os.path.abspath('01-高阶函数.py'))# isdir判断是否是文件夹
print(os.path.isdir('02-函数的嵌套.py'))
print(os.path.isdir('xxx'))# isfile判断是否是文件# exists判断是否存在
print(os.path.exists('05-优化计算时间的代码.py'))# splitfile_name = '2020.2.21.demo.py'
print(file_name.rpartition('.'))
print(os.path.splitext('2020.2.21.demo.py'))# os里其它方法的介绍
# os.getcwd()   # 获取当前工作目录
# os.chdir('test')    # 改变当前脚本的工作目录
# os.rename('毕业论文.txt', '毕业论文最终版.txt')    #  文件重命名
# os.remove('毕业论文.txt')   # 删除文件
# os.rmdir('demo')    # 删除文件夹
# os.mkdir('demo')    # 新建文件夹
# os.chdir('C:\\')   # 切换工作目录
# os.listdir('C:\\')  # 列出目录中的所有文件
# os.name   #  操作系统名称
# os.environ  # 获取到环境配置
# os.environ.get('PATH')   # 获取指定的环境配置

sys模块

# sys 系统相关的模块
import sys
import randomprint('hello world')
print('呵呵呵')#
print(sys.path)   # 结果是一个列表,表示查找模块的路径
# sys.exit(100)   # 程序直接退出,并且设置退出码为100 和内置函数exit功能一样
sys.stdin  # 可以像input一样,接收用户的输入,和input相关 ,可以不断输入
# input('请输入用户名:')
sys.stdout   # 标准输出,打印到指定的地方,默认是输出台sys.stderr  # 修改sys.stderr 可以改变错误输出的默认位置,默认是控制台

math模块

# 数学计算相关模块
import math# 2 ** 10  /  pow(2, 10)   /  math.pow(2, 10)
print(math.factorial(6))
print(math.pow(2, 10))   # 1024  幂运算print(math.floor(12.98))  # 12.向下取整
print(math.ceil(15.001))    # 16.向上取整# round()  内置函数,实现四舍五入到指定位数print(math.sin(math.pi / 6))   # 弧度 π=180  π/6
print(math.cos(math.pi / 3))
print(math.tan(math.pi / 2))

random模块的使用

# random模块用来生成随机数
import random# randint  用来生成[a, b]的随机整数   等价于 randrange(a, b+1)
print(random.randint(2, 9))# random() 用来生成[0,1)的随机浮点数
print(random.random())#randrange(a, b) 用来生成[a, b)的随机整数
print(random.randrange(2, 9))# choice 用来在可迭代对象里随机抽取一个数据
random.choice(['zhangsan', 'lisi', 'jack', 'jerry', 'henry', 'tony'])# sample 用来在可迭代对象里面随机抽取n个数据
print(random.sample(['zhangsan', 'lisi', 'jack', 'jerry', 'henry', 'tony'], 2))

datetime模块

import datetime as dt# 以一个下划线_ 开始  _x
# 以两个下划线__ 开始   __x
# 以两个下划线开始, 再以两个下划线结束  __x__# 涉及到四个类 datetime/date/time/timedelta
print(dt.datetime.now())  # 获取当前时间print(dt.date(2020, 1, 1))  # 创建一个日期print(dt.time(18, 23, 45))  # 创建一个时间print(dt.datetime.now() + dt.timedelta(3))    # 计算三天以后的日期时间# 内置类
# list tuple int str
print(int('123'))

time模块

import timeprint(time.time())   # 获取从1970-01-01  00:00:00  UTC 到现在时间的秒数
print(time.strftime("%Y-%m-%d %H:%M:%S"))  # 按照指定格式输出时间
print(time.asctime())   # Fri Mar 25 12:18:22 2022
print(time.ctime())  # Fri Mar 25 12:18:22 2022print('hello')
print(time.sleep(10))    # 让线程暂停10秒钟
print('world')

calendar模块

import calendar  # 日历模块calendar.setfirstweekday(calendar.SUNDAY)
print(calendar.firstweekday())c = calendar.calendar(2022)  # 生成2019年的日历
print(c)   # 打印2019年日历print(calendar.isleap(1900))  # 判断是否是闰年
count = calendar.leapdays(1996, 2022)  # 获取1996到2022年之间一共有多少个闰年print(count)
print(calendar.month(2022, 3))

hashlib和hmac模块

import hashlib
import hmac# 这两个模块都是用来进行数据加密
# hashlib模块里主要支持两个算法 md5 和 sha加密方式
# 加密方式:单向加密(只有加密过程,不能解密)md5/sha   对称加密  非对称加密rsa# 需要将要加密的内容转换成为二进制
x = hashlib.md5()   # 生成一个md5对象
x.update('abc'.encode('utf8'))
print(x.hexdigest())   # 900150983cd24fb0d6963f7d28e17f72
# 'abc'  ==>  900150983cd24fb0d6963f7d28e17f72x1 = hashlib.md5('y76djfh8!'.encode('utf8'))
print(x.hexdigest())h1 = hashlib.sha1('123456'.encode())
print(h1.hexdigest())
h2 = hashlib.sha224('123456'.encode())   # 224位  一个十六进制占4位
print(h2.hexdigest())
h3 = hashlib.sha256('123456'.encode())
print(h3.hexdigest())
h4 = hashlib.sha384('123456'.encode())
print(h4.hexdigest())# 文件的md5# hmac加密可以指定秘钥
h = hmac.new('h'.encode(), '你好'.encode())
result = h.hexdigest()
print(result)    #获取加密后的结果

第1001次python入门——Day09相关推荐

  1. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  2. Python入门-散点图绘制

    Python入门-散点图绘制 Python入门-散点图绘制  废话不说 直接上代码 import matplotlib.pyplot as pltx_values = list(range(1,100 ...

  3. Python入门 —— 从零基础到调包侠

    文章目录 hello world 常量和表达式 变量 使用 类型 int整型 float浮点型 str字符串 bool布尔型 动态类型特性 注释 行注释 文档字符串 输入输出 print() 格式控制 ...

  4. Python入门——第一章 python编程基础

    Python入门 文章目录 Python入门 第一章 python编程基础 1.1 基本输入输出 1.1.1使用print()函数进行简单输出 chr()函数 print()输出到指定文件 print ...

  5. python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全

    近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...

  6. Python入门学习方法有哪些?

    Python编程语言是相对比较简单的一门编程语言,在IT行业,很多零基础学员都会优先选择Python语言进行学习,希望可以进入到IT这个大家庭,那么想要学好Python编程,针对Python入门学习方 ...

  7. 全了!从Python入门到入魔

    总被读者问到,我看完了python入门的书,后面就不知道要学什么了.今天就给你们整理全套入门到进阶的教程. 这套教程非常全面而且详细,从Python入门到Python进阶.Django.Flask等W ...

  8. 全了!从Python入门到精通

    总被读者问到,我看完了python入门的书,后面就不知道要学什么了.今天就给你们整理全套入门到进阶的教程. 这套教程非常全面而且详细,从Python入门到Python进阶.Django.Flask等W ...

  9. 卧槽!微软Python入门课居然汉化了!

    去年,微软上线了自己的Python入门课程.一时间,好评如潮.但是真正看完这个课程的国人非常少,因为它的翻译实在是太烂了(英文听力好的人应该看的还是很爽的).很明显,微软直接采用了机器翻译,导致视频的 ...

最新文章

  1. ubuntu下查看IP Gateway DNS信息
  2. “刷脸”之后 声纹识别有望成为新秀
  3. 第三章 表单与表单元素
  4. 代码质量 重构 代码鸡汤
  5. 开源地图编辑器 MarbleMap,支持Cocos2d-x坐标系
  6. 6Y叔的clusterProfiler-book阅读 Chapter 6 KEGG analysis
  7. C#中调用Windows API的要点 .
  8. 【大数据部落】银行信用数据SOM神经网络聚类实现
  9. java基于springboot+vue学生考勤签到请假管理系统84y43
  10. Hibernate官网下载最新版jar包
  11. 大型POS机收银系统源码MVC架构
  12. 3个国内最大的黑客学习网站
  13. 第九周 项目一--猴子选大王(数组版)
  14. 顺德苹果售后维修体验
  15. Linux Bridge实现
  16. 零基础入行IT,怎么成为一名优秀的IT人才?
  17. MySQL8.0.26的时候解压libs文件出现错误:依赖检测失败:mariadb-libs 被 mysql-community-libs-8.0.26-1.el7.x86_64 取代
  18. 快速上手Flask(一) 认识框架Flask、项目结构、开发环境
  19. Qt——QLineEdit
  20. 教授专栏44 | 李家涛:企业高层性别均衡,发展趋势可憧憬

热门文章

  1. 图形学-变换(平移矩阵,旋转矩阵,缩放矩阵,线性变换,仿射变换,齐次坐标)
  2. ElasticSearch 深度分页详解
  3. 欢(nan)乐(shou)纪中培训(Day 0~Day 1)
  4. Android调试神器stetho使用详解和改造 1
  5. Fecebook Stetho工具介绍
  6. 两个程序都要用同一个端口,怎么解?
  7. 写给大忙人看的jQuery动画效果
  8. 谁说夫妻之间没有爱情只剩亲情?
  9. ubuntu-gitlab搭建
  10. Python爬虫实战(1)之千千音乐热歌前50