
目录一条件判断1条件表达式2单分支选择结构3多分支选择结构4嵌套分支结构5条件表达式的简写三元表达式二循环结构1for循环2while循环3嵌套循环三异常处理结构1认识异常2获取异常类型3处理多个异常4else子句5,finally子句四函数的定义和使用1认识函数2返回值return3lambda表达式4递归函数5生成器函数6嵌套函数五参数类型与调用方式1默认参数2可变位置参数*args3可变关键字参数**kwargs4混合使用参数5参数解包六变量作用域一条件判断1条件表达式if 和 while后面都需要加上一个条件表达式表达式最终的结果为True(执行)或者False(不执行)常见的会被当成False的表达式None0 0.0 0j(复数)(空字符串) [](空列表) (空元组) {} (空字典set() (空集合)range(0)2单分支选择结构语法if 条件表达式语句块3多分支选择结构语法if 条件表达式语句块1else:语句块2当情况比较多时语法if 条件表达式:语句块1elif :语句块2……else:语句块3注意1条件表达式后面不要忘记写:2当同时满足多个条件时注意条件的逻辑先后顺序一般条件从小到大或者从大到小4嵌套分支结构在判断条件内使用判断条件例子注意缩进即可5条件表达式的简写三元表达式语法值1 if 条件 else 值2当满足条件时执行值1当不满足条件时执行值2二循环结构1for循环for循环一般用于遍历一个可迭代的对象。例如字符串列表元组字典集合range(n)语法for 变量名 in 可迭代对象循环体展示student {name : Tom,age : 18} #1key和value都是新创建的变量 #2字典需要调用items() for key,value in student.items(): print(key,value) #步长为2 for i in range(2,11,2): print(i)运行结果name Tomage 18246810常见的用法遍历索引和值enumerate(可迭代对象)会把序列包装成索引元素的成对迭代器fruits {apple,banana,orange} for index,value in enumerate(fruits): print(index,value)运行结果0 apple1 orange2 banana2while循环while循环适合“当条件满足时一直进行循环语法while 条件表达式语句break语句立刻结束当前的循环直接跳出最外层continue语句跳过本轮循环进入下一轮循环当前循环下的代码不执行。循环当中的elsefor和while都可以带上else规则循环正常结束执行else循环因为break而提前结束不执行else输出结果没找到3嵌套循环循环的内部还可以写循环展示九九乘法表for i in range(1,10): for j in range(1,i1): print(f{j} * {i} {i*j},end ) print()end表示打印完后末尾追加一个怎样的字符三异常处理结构1认识异常程序运行时可能出现的错误就叫异常。除数不为0 数组索引越界 字典的键不存在 文件不存在 输入的不是数字这些错误可以称之为异常。提前处理可以让程序更稳固语法try:可能出现异常的代码except 异常的类型出错的处理的代码出错不同异常的类型就不同展示try: x int(input(请输入一个整数)) print(x) except ValueError: print(输入的内容不是整数)2获取异常类型#获取异常对象 try: x int(abc) print(x) except ValueError as e:#将异常重命名为e,然后打印 print(异常类型,e)3处理多个异常#分别进行处理 try: x int(input(请输入一个整数)) sum 10 / x except ValueError: print(请输入正确的整数) except ZeroDivisionError: print(除数不能为0) #合并进行处理 try: a int(input(请输入一个整数)) b 10 / a except (ValueError,ZeroDivisionError): print(请输入正确的值)4else子句#else子句 try: x int(input(请输入一个整数)) except ValueError: print(请输入正确的整数) else: #正确时就执行else print(这个整数是,x)出错时执行except正确时执行else5,finally子句finally无论是否发生异常都会执行#finally子句 try: f open(test.txt,r,encodingutf-8) content f.read() except FileNotFoundError: print(文件不存在) finally: print(程序结束)常见用途关闭文件释放资源做收尾工作注意要捕获具体的异常不要滥用异常处理四函数的定义和使用1认识函数函数的功能1复用代码降低重复劳动 2便于测试和维护 3让程序更清晰函数定义的基本语法def 函数名(参数列表)函数体2返回值returnreturn的作用1返回函数结果 2让程序提前结束演示没有return:#没有return的函数演示 def demo(): print(函数体) x demo() print(x)结果函数体None没有return时函数默认返回NonePython当中的return能够返回多个返回值#返回多个返回值 def demo1(a): return min(a),max(a),sum(a) num {1,2,4,7} mn,mx,sm demo1(num) print(mn,mx,sm)结果1 7 14python实际返回的是一个元组函数可以作为参数传递个其他函数展示#numpy是一个外部库 import numpy as np #函数作为参数 def demo2(func,value): return func(value) print(demo2(np.square,6)) print(np.square(6))3lambda表达式lambda用来定义简单的匿名函数语法lambda 参数表达式只有一行适合函数只有短小逻辑展示sum lambda a,b : ab print(sum(2,3))结果5常见用法作为key函数#按照年龄进行降序排序 student [(Tom,20),(xiaoli,30),(zhangsan,12)] sum sorted(student,key lambda item:item[1],reverse True) print(sum)结果[(xiaoli, 30), (Tom, 20), (zhangsan, 12)]lambda适合取代一下短小函数也适合传给key ,map(),filter()函数不适合逻辑复杂需要多行处理的4递归函数递归函数在函数体当中调用自己要想完成递归需要找到两部分内容1递归的终止条件2进行问题缩小的递归过程做题时优先找到递推公式以及递推的结束条件。递归的结束条件也是起始条件。展示计算阶乘递归的优缺点优点1大幅减少代码量2适合处理树回溯分治的问题缺点1性能开销大2可能会引起栈溢出3调试困难5生成器函数带有yield的函数就是生成器函数生成器函数的特点1不会直接执行完函数体2每次会返回一个生成器对象3每次取值时执行到下一个yield对象展示生成1~n的平方squares处没有执行函数体而是生成了一个生成器对象list(result)将生成器对象转化为列表就是消耗生成器对象此时才开始执行生成器的优点:1,节省内存生成器是要一个就算一个给一个。函数则是全部执行。list会直接生成10000个平方计算后的数字占用大量内存但是gen一个数字也不会计算而只是创建一个生成器对象generator对象)内存占用几乎为0只储存生成器状态。2生成器只能被逐步消耗将g类比成一个一次性筷子当第一次使用完后就不能再使用6嵌套函数函数的内部还可以定义函数def outer(x): def inner(y): return x y return inner(3) print(outer(5))outer(5)-inner(3)-xy最终的值是由inner(3)进行返回的五参数类型与调用方式1默认参数默认参数的常见规则默认参数需要在非默认参数的后面默认参数在函数定义时计算一次只要之后不额外传参使用的就时同一个错误使用使用可变的默认参数def append_item(item,items[]): items.append(item) return items print(append_item(1)) print(append_item(2))运行结果[1][1,2]由于tiems在调用时只计算一次之后再次调用就不会重新计算而是共享之前的计算值所以第二次调用会复用第一次的列表正确的使用方法使用None作为默认值def append_item2(item,itemsNone): if items is None: items [] items.append(item) return items print(append_item2(1)) print(append_item2(2))运行结果[1][2]将初始值定义为空每次调用只要为空就初始化为新的空列表2可变位置参数*args用于接收数量不确定的位置参数args实际是一个元组def total_sum(*args): return sum(args) print(total_sum(1,2,3,4)) print(total_sum(3,4,5,6,7))结果10253可变关键字参数**kwargs用于接收数量不确定的关键字参数kwargs实际上是一个字典def show_info(**kwargs): print(kwargs) show_info(name Tom,age 18, id 234556)结果{name: Tom, age: 18, id: 234556}4混合使用参数def demo(a,b,*args,**kwargs): print(a ,a) print(b ,b) print(args ,args) print(kwargs ,kwargs) demo(1,2,3,4, name Tom,age 18)结果a 1b 2args (3, 4)kwargs {name: Tom, age: 18}5参数解包1列表元组解包def add(a,b,c): return abc sums [1,2,3] print(add(*sums))结果62字典解包def info(name,age): print(name,age) student {name:zhangsan,age:18} info(**student)结果zhangsan 18六变量作用域局部变量只能在函数内部进行访问全局变量可以在整个模块进行访问想要在函数内部修改全局变量需要使用globalcount 0 def increable(): global count count 1 increable() print(count)结果1nonlocal关键字当函数嵌套内层函数想要改变外层函数的局部变量时可以使用nonlocal关键字def outer(): count 0 def inner(): nonlocal count count 1 print(count) inner() inner() outer()结果1 2