异常
try:
xxx、
except xxx:
else:
没有捕获到异常就执行我
print(xxxx)
如果不出现错误则执行else 子句
finally子句无论异常是否发生都会执行
触发异常raise
函数
创建函数def 函数名 参数
调用
函数的使用需要顺序先声明 不允许没有声明就提前调用
定义函数时,函数的先后顺序不重要,重要的是 函数在什么位置被调用
调用关键字传参 函数名(形式参数名=值)
使用一对圆括号() 调用函数,如果没有圆括号,只是对函数的引用
def get_info(a,b=111):
print(f"a:{a},b:{b}")
if __name__ == '__main__':
get_info(1)
get_info(b=123123,a=66666)#关键字传参
如果混用 位置传参放在关键字传参的前面
print("1230,"56677",sep='----') #键字传参 放在了位置的后面
弄反了报错如下SyntaxError: positional argument follows keyword argument
算术小游戏
import random
def exam():
nums=[random.randint(1,100) for i in range(2)]
nums.sort(reverse=True)
fuhao=random.choice(["+","-"])
if fuhao=="+": #data正确答案
data=nums[1]+nums[0]
else: #"-"
data=nums[0]-nums[1]
suan=int(input(f"第一个数{nums[0]}{fuhao}第二个数{nums[1]}=???____:"))
if suan == data:
print("bingo~~")
else:
print(f"你算错了正确答案是{data}")
if __name__ == '__main__':
exam()
匿名函数
不需要以标准的def声明而是用一个完整的lambda语句 代表了一个表达式
没有名字 直接写形式参数 :直接写算法 lambda x,y:x+y lambda 函数的定义 声明必须放在同一行
def fun01(num):
return True if num % 2 == 1 else False
fun02 = lambda num: True if num % 2 == 1 else False
if __name__ == '__main__':
print(fun01(100),fun02(101))
函数式编程 : 将一个函数作为另一个函数的参数 filter(布尔函数,列表)
将列表中的元素遍历一次传入布尔函数中
filter(func, seq): 调用一个布尔函数 func 来迭代遍历每个序列中的元素;返回一个使 func 返回值为 true 的元素的序列
如果布尔函数比较简单,直接使用 lambda 匿名函数就显得非常方便了
data=filter(lambda x:x%2,[num for num in range(10)])
print(list(data))#过滤出10以内的奇数
map
进几个元素出几个并不会进行过滤 返回一个新的列表
map(加工函数,列表)将每个数据交给加工函数去除处理 并返回处理的结果
map(func,seq): 调用一个函数func 来迭代遍历每个序列中的元素;返回一个经过func处理过的元素序列
map(func, seq)函数的使用,将seq序列中的元素,传入函数func后,经过处理后全部保留下来
data=map(lambda x:x*2+1,[num for num in range(10)])
print(list(data))
变量的作用域
全局变量
函数外部定义的变量
作用域函数内外都可以使用
局部变量
作用于函数内部的变量
就近原则 局部--全局---内建模块---报错
global
函数内部使用并修该全局变量的值
全局的 global 如果在函数内部使用的是global声明变量就可以修改全局变量的值()
生成器
延迟操作 需要的时候才产生结果 而不是立即产生结果 这是生成器的主要好处
生成器表达式
gen.__next__() 生成器中的元素只能获取一遍 放入内存中 用一个扔一个 用来处理大批量数据
sum((i for i in range(1,59999999)))
生成器函数(yield)
return 函数执行的终止
yield 函数执行的暂停
def fun01():
a=10
yield a#return 表示函数执行的终止
b="hello"
yield b
c=[1,2,3]
yield c
if __name__ == '__main__':
gen=fun01()
print(gen.__next__())
print(gen.__next__())
print(gen.__next__())
#值让取完了就会抛出异常Stoplteration
你需要知道
以下函数定义是否正确?为什么?
def myfunc(age=22, name):
pass
不正确 因为默认放在后面
2 请将以下函数改为匿名函数。
def add(x, y):
return x + y
add=lambda x,y:x+y
3 请通过map()函数简化以下代码。
time_str ='2019-12-1'
time_str = time_str.split('-')
year =int(time_str[0])
month =int(time_str[1])
date =int(time_str[2])
year,month,date=map(int,time_str.split('-'))
4 分析以下代码。请问变量x的值是什么?为什么?
x =10
def change_x():
global x
x ='hello'
print(x)
10 因为函数就没有调用
5 Python的模块命名有哪些约定?
首字符可以是字母或下划线
后续字符可以是字母、数字或下划线
区分大小写
6 python文件和模块的关系是什么?
文件是物理上组织代码的形式 模块是逻辑上组织代码的形式
文件扩展名.py移除就是模块名
7 在导入模块时,python到哪些路径查找模块文件。
sys.path所定义的路径
PYTHONPATH环境变量所定义的路径