Python 入门学习 详细知识点+典型例题/自学笔记(二)_字母符号数字的博客-程序员宅基地
目录
try- except- else 未检测出异常,执行else
trry-except-finally 无论异常是否发生都会执行内容
python函数作用: 打包代码(1.减少冗余 2.将不同功能的代码封装,分解)
def myfunc():
pass 函数体
def myfunc():
for i in range(3):
print("I Love python")
调用myfunc()打印三次I Love python
myfunc()
I Love python
I Love python
I Love python
参数 可以替换,可以有多个,并且可以指定打印次数
def myfunc(name,times): for i in range(times): print(f"I Love {name}") myfunc("python",5) 打印5次 I Love python I Love python I Love python I Love python I Love python
形参和实参
函数的返回值 return ()
def div(x,y):
if y==0:
return "除数不能为0!!!"
else:
return x/y
调用div()函数
div(4,2)
2.0
div(4,0)
'除数不能为0!!!'
若语句没有通过return()显示的来返回内容,则自己返回一个none值
def myfunc(s,vt,o):
return "".join ((o,vt,s)) 颠倒顺序并连接
myfunc("我","喜欢","你")
'你喜欢我'
myfunc("你","喜欢","我")
'我喜欢你'
/ 左侧只能使用位置参数 * 右侧只能是关键字参数
myfunc(o="我",vt="喜欢",s="你")
'我喜欢你'
混合使用时,位置参数必须在关键字参数之前
def myfunc(s,vt,o="猪"):
return "".join ((o,vt,s))
myfunc("人","吃") 只传两个参数
'猪吃人'
myfunc("人","吃","饭") 传三个会自动覆盖默认参数
'饭吃人'
默认参数应该放在后面
打包为字典(加**)
def myfunc(**kwargs):
print(kwargs)
myfunc(a=1,b=2,c=3)
{'a': 1, 'b': 2, 'c': 3}
混合使用
def myfunc(a,*b,**c):
print(a,b,c)
myfunc(1,2,3,4,x=5,y=6) 1给的a,2,3,4打包为元组给b,x=5,y=6打包为字典形式给c
1 (2, 3, 4) {'x': 5, 'y': 6}
一个*号
rgs=(1,2,3,4) def myfunc(a,b,c,d): print(a,b,c,d) myfunc(*args) 1 2 3 4
两个*号(对应的关键字参数)
kwargs={'a':1,'b':2,'c':3,'d':4} myfunc(**kwargs) 1 2 3 4
局部作用域
全局作用域
global语句 故意声明是一个全局变量,并且修改值
def funA():
x=520
def funB():
x=880
print("In funB,x=",x)
funB()
print("In funA,x=",x)
funA()
In funB,x= 880
In funA,x= 520
nonlocal语句 用于内部修改外部函数
def funA():
x=520
def funB():
nonlocal x
x=880
print("In funB,x=",x)
funB()
print("In funA,x=",x)
funA()
In funB,x= 880
In funA,x= 880
LEGB规则 局部和全局发生冲突时,选择哪个
str="我把python学会了"
str
'我把python学会了'
str(520)
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
str(520)
TypeError: 'str' object is not callable
def power(exp):
def exp_of(base):
return base **exp
return exp_of
square=power(2)
cube=power(3)
square(2)
4
square(5)
25
cube(2)
8
cube(5)
125
import time
def time_master(func):
def call_func():
print("开始运行程序......")
start=time.time()
func()
stop=time.time ()
print("结束程序运行.......")
print(f"一共耗费了{(stop-start):.2f}秒。")
return call_func
@time_master 添加装饰器
def myfunc():
time.sleep (2)
print("hallo baby")
myfunc()
开始运行程序......
hallo baby
结束程序运行.......
一共耗费了2.02秒。
可以同时使用多个装饰器
语法:
lambda arg1,arg2,arg3,.....argN : expression
def squareX(x):
return x*x
squareX(3)
9
等价于:
squareY=lambda y:y*y
squareY(3)
9
y=[lambda x:x*x,2,3]
y[0](y[1]) 第二个参数
4
y[0](y[2]) 第三个参数
9
求出10以内的奇数
list(filter(lambda x:x%2,range(10))) [1, 3, 5, 7, 9]
在函数中使用yield表达式代替return语句
def counter():
i=0
while i<=5:
yield i
i+=1
counter()
<generator object counter at 0x0000020B7FD66570>
for i in counter():
print(i)
0
1
2
3
4
5
斐波那契数列 新的数据等于前两个数据的和
def fib(): back1,back2=0,1 while True: yield back1 back1,back2=back2,back1+back2 f=fib() next(f) 0 next(f) 1 next(f) 1 next(f) 2 next(f) 3
直接使用生成器表达式
t=(i**2 for i in range(10)) 打印0到10每个数的平方
next(t)
0
next(t)
1
next(t)
4
next(t)
9
def func(i):
if i>0:
print("AWBDYL")
i-=1
func(i)
func(10)
AWBDYL
AWBDYL
AWBDYL
AWBDYL
AWBDYL
AWBDYL
AWBDYL
AWBDYL
AWBDYL
AWBDYL
求一个数的阶乘
迭代方法: def factIter(n): result=n for i in range(1,n): result *=i return result factIter(5) 120
递归方法: def factrecur(n): if n==1: return 1 else : return n * factrecur(n-1) factrecur(5) 120
9.1斐波那契数列:
递归:生兔子
def fibRecur(n):
if n==1 or n==2:
return 1
else:
return fibRecur(n-1)+fibRecur(n-2)
fibRecur(12)
144
迭代:生兔子
def fibIter(n):
a=1
b=1
c=1
while n>2:
c=a+b
a=b
b=c
n-=1
return c
fibIter(12)
144
9.2 汉诺塔
def hanoi (n,x,y,z):
if n==1:
print(x, '--->', z) #如果只有1层,直接将金片从x移动到z
else:
hanoi(n-1, x, z, y) #将x上的n-1个金片移动到y
print(x, '--->', z) #将最底下的金片从x移动z
hanoi(n-1, y, x, z) #将y上的n-1个金片移动到z
n=int(input('请输入汉诺塔的层数:'))
hanoi(n,'A','B','C')
请输入汉诺塔的层数:5
A ---> C
A ---> B
C ---> B
A ---> C
B ---> A
B ---> C
A ---> C
A ---> B
C ---> B
C ---> A
B ---> A
C ---> B
A ---> C
A ---> B
C ---> B
A ---> C
B ---> A
B ---> C
A ---> C
B ---> A
C ---> B
C ---> A
B ---> A
B ---> C
A ---> C
A ---> B
C ---> B
A ---> C
B ---> A
B ---> C
A ---> C
函数文档(汇率转换)
def exchange(dollar,rate=6.32): """ 功能:汇率转换 ,美元————》人民币 参数: -dollar 美元数量 -rate 汇率,默认值为 6.32 返回值: -人民币数量 """ return dollar *rate exchange(10) 63.2
类型注释
def times(s:str , n:int )->str: s类型为字符串型,n类型为整型 return s*n times("python",5) 'pythonpythonpythonpythonpython'
内省(自我检测机制)
times.__name__ 查看名字 'times' times.__annotations__ 查看类型注释 {'s': <class 'str'>, 'n': <class 'int'>, 'return': <class 'str'>}
doc 查看函数文档
reduce函数
def add(x,y):
return x+y
import functools
functools.reduce (add,[1,2,3,4,5])
15
等价于:
add(add(add(add(1,2),3),4),5)
15
偏函数(对指定的函数进行二次包装)
square=functools.partial(pow,exp=2)
square(2)
4
square(3)
9
@wraps装饰器
f=open ("python.txt","w") 打开文件,可写 f.write ("I love python.") 14 f.writelines(["I love python.\n","I love my file"]) f.close()
f=open("python.txt","r+") 打开文件 f.readable () 检测是否可读 True f.writable() 检测是否可写 True
f.tell() 指针位置 44 f.seek(0) 移动指针到头 0 f.readline () 读取一行 'I love python.I love python.\n' f.read () 读到末尾 'I love my file' f.write ("我再写点东西") 6 f.flush () 缓存数据写入文件中 f.truncate (29) 截断操作 29 f.close() f=open ("python.txt","w") 打开再关闭直接清空 f.close()
查询:
cwd( ) 路径导入
/ 拼接
is_dir( ) 判断路径是否为文件夹
is_file() 判断是否为文件
exists() 检测路径是否存在
name 获取路径最后一个部分
stem 获取文件名
suffix 获取文件后缀
parent 获取父级目录
parents 获取逻辑祖先路径构成的序列
parts 将路径各个组件拆分成元组
stat() 查询文件或文件夹
resolve() 将相对路径转换为绝对路径
iterdir() 获取当前路径下子文件和子文件夹
from pathlib import Path Path.cwd () WindowsPath('C:/Users/z/AppData/Local/Programs/Python/Python310') p=Path('') p=Path('C:/Users/z/AppData/Local/Programs/Python/Python310') p WindowsPath('C:/Users/z/AppData/Local/Programs/Python/Python310') q=p/"python.txt" q WindowsPath('C:/Users/z/AppData/Local/Programs/Python/Python310/python.txt') p.is_dir() True q.is_dir () False p.is_file () False q.is_file () True p.exists() True q.exists() True p.name 'Python310' q.name 'python.txt' q.stem 'python' q.suffix '.txt' p.parent WindowsPath('C:/Users/z/AppData/Local/Programs/Python') q.parent WindowsPath('C:/Users/z/AppData/Local/Programs/Python/Python310') p.parents <WindowsPath.parents> ps=p.parents for each in ps: print(each) C:\Users\z\AppData\Local\Programs\Python C:\Users\z\AppData\Local\Programs C:\Users\z\AppData\Local C:\Users\z\AppData C:\Users\z C:\Users C:\ ps[0] WindowsPath('C:/Users/z/AppData/Local/Programs/Python') ps[1] WindowsPath('C:/Users/z/AppData/Local/Programs') ps[2] WindowsPath('C:/Users/z/AppData/Local') p.parts ('C:\\', 'Users', 'z', 'AppData', 'Local', 'Programs', 'Python', 'Python310') p.stat() os.stat_result(st_mode=16895, st_ino=14636698789026712, st_dev=3025546364, st_nlink=1, st_uid=0, st_gid=0, st_size=4096, st_atime=1659369987, st_mtime=1659367376, st_ctime=1657550508) p.stat().st_size 4096 Path("./doc").resolve() WindowsPath('C:/Users/z/AppData/Local/Programs/Python/Python310/Doc') p.iterdir() <generator object Path.iterdir at 0x000002A301E80CF0>
修改:
mkdir( ) 创建文件夹
n=p/"python" n.mkdir()
open () 打开文件
rename( ) 修改文件或文件夹名字
n.rename("newpython.txt") WindowsPath('newpython.txt')
replace( ) 替换指定的文件或文件夹
删除:
rmdir( ) 删除文件夹
unlink( ) 删除文件
查找:
glob( ) 查找功能
p=Path('.') p.glob ("*.txt") <generator object Path.glob at 0x000002A37FCD6570> list(p.glob ("*.txt")) [WindowsPath('LICENSE.txt'), WindowsPath('newpython.txt'), WindowsPath('NEWS.txt'), WindowsPath('python.txt')]
文件管理器 with
with open("python.txt","w")as f:
f.write("文件管理器")
5
等价于
f=open("python.txt","w")
f.write("文件管理器")
5
pickle 永久存储对象
try:
1/0
except:
print("出错了")
出错了
try :
1/0
520+"python"
except(ZeroDivisionError,ValueError,TypeError): 直接忽略
pass
try:
1/0
520+"python"
except ZeroDivisionError:
print("除数不能为0!!")
except ValueError:
print("值不正确")
except TypeError:
print("类型不正确")
除数不能为0!!
try:
1/0
except:
print("逮到异常")
else:
print("没有逮到异常,哦豁")
逮到异常
try:
1/1
except:
print("逮到异常")
else:
print("没有逮到异常,哦豁")
1.0
没有逮到异常,哦豁
try:
1/0
except:
print("逮到异常")
else:
print("没有逮到异常,哦豁")
finally:
print("逮没逮到都会吱一声")
逮到异常
逮没逮到都会吱一声
异常嵌套
try:
1/0
try:
520+"python"
except:
print("内部异常!!!")
except:
print("外部异常!!!")
finally:
print("收尾工作~")
外部异常!!!
收尾工作~
raise 语句
raise ValueError("值不正确")
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
raise ValueError("值不正确")
ValueError: 值不正确
assert 语句 类似于if语句
s="python"
assert s=="python"
assert s!="python"
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
assert s!="python"
AssertionError
利用异常来实现goto
try:
while True:
while True:
for i in range(10):
if i >3:
raise
print(i)
print("被跳过~")
print("被跳过~")
print("被跳过~")
except:
print("到这来了~")
0
1
2
3
到这来了~
文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大
文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码
文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版
文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗
文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程
文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0
文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader
文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型
文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写
文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录
文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点
文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文