第1001次python入门——Day09
高阶函数
# 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相关推荐
- Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...
- Python入门-散点图绘制
Python入门-散点图绘制 Python入门-散点图绘制 废话不说 直接上代码 import matplotlib.pyplot as pltx_values = list(range(1,100 ...
- Python入门 —— 从零基础到调包侠
文章目录 hello world 常量和表达式 变量 使用 类型 int整型 float浮点型 str字符串 bool布尔型 动态类型特性 注释 行注释 文档字符串 输入输出 print() 格式控制 ...
- Python入门——第一章 python编程基础
Python入门 文章目录 Python入门 第一章 python编程基础 1.1 基本输入输出 1.1.1使用print()函数进行简单输出 chr()函数 print()输出到指定文件 print ...
- python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全
近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...
- Python入门学习方法有哪些?
Python编程语言是相对比较简单的一门编程语言,在IT行业,很多零基础学员都会优先选择Python语言进行学习,希望可以进入到IT这个大家庭,那么想要学好Python编程,针对Python入门学习方 ...
- 全了!从Python入门到入魔
总被读者问到,我看完了python入门的书,后面就不知道要学什么了.今天就给你们整理全套入门到进阶的教程. 这套教程非常全面而且详细,从Python入门到Python进阶.Django.Flask等W ...
- 全了!从Python入门到精通
总被读者问到,我看完了python入门的书,后面就不知道要学什么了.今天就给你们整理全套入门到进阶的教程. 这套教程非常全面而且详细,从Python入门到Python进阶.Django.Flask等W ...
- 卧槽!微软Python入门课居然汉化了!
去年,微软上线了自己的Python入门课程.一时间,好评如潮.但是真正看完这个课程的国人非常少,因为它的翻译实在是太烂了(英文听力好的人应该看的还是很爽的).很明显,微软直接采用了机器翻译,导致视频的 ...
最新文章
- ubuntu下查看IP Gateway DNS信息
- “刷脸”之后 声纹识别有望成为新秀
- 第三章 表单与表单元素
- 代码质量 重构 代码鸡汤
- 开源地图编辑器 MarbleMap,支持Cocos2d-x坐标系
- 6Y叔的clusterProfiler-book阅读 Chapter 6 KEGG analysis
- C#中调用Windows API的要点 .
- 【大数据部落】银行信用数据SOM神经网络聚类实现
- java基于springboot+vue学生考勤签到请假管理系统84y43
- Hibernate官网下载最新版jar包
- 大型POS机收银系统源码MVC架构
- 3个国内最大的黑客学习网站
- 第九周 项目一--猴子选大王(数组版)
- 顺德苹果售后维修体验
- Linux Bridge实现
- 零基础入行IT,怎么成为一名优秀的IT人才?
- MySQL8.0.26的时候解压libs文件出现错误:依赖检测失败:mariadb-libs 被 mysql-community-libs-8.0.26-1.el7.x86_64 取代
- 快速上手Flask(一) 认识框架Flask、项目结构、开发环境
- Qt——QLineEdit
- 教授专栏44 | 李家涛:企业高层性别均衡,发展趋势可憧憬