一,while循环
使用方式和之前学的一致,这里只说新加入的
while...else 当while语句条件为false时候执行else (else和while平级)
二,for循环
和之前的有差别,它支持序列和迭代器作为参数
简单用法:
新增的for-else语句
和while-else用法一致 for - else中 for 和else是平级关系,在for循环结束后,会执行else语句
def关键字开头,后面接函数名,函数名后面接()参数列表。还有冒号起始
函数体要缩进,函数可以不写return,不写默认返回None,函数返回值可以是列表
这里对python函数参数的问题分析分析:
首先要明白python中,类型属于对象,而变量是没有类型的。对于这句话的理解看一下代码
a= [ 1 , 2 , 3 ]
a= " Runoob "
以上代码中,[1,2,3]是List类型,而" Runoob "是string类型。变量a是没有类型的,她仅仅是一个对象的引用
它可以是list,也可以是string
明白了上面的理论,再回过头来看函数参数的问题,传参的类型可以是可变类型,也可以是不可变类型
可变类型:列表,字典
不可变类型:string tuples number都是不可变的
那具体什么叫可变,什么叫不可变。这就和上面提到的类型属于对象,变量没有类型 有关系
不可变类型:
例如 a=10, 然后我们在赋值 a=5 这里实际是新生成了一个对象 10(int类型),然后我们让a去指向了它
我们并没有改变a的值,只是让他重新指向了一个值,之前的5被丢弃了
可变类型:
list=[1,2,3,4] 我们现赋值list[2]=10 这里将第三个元素的值改变了,但是!list本身并没有动,它只是内容的一部分被修改了
综上理论,我们可以得出:我们在函数传参的时候
1. 如果传入的是不可变类型(类似于c++的值传递),我们传递进去后,函数内无论怎么去改变这个参数的值,都不会影响原有的参数
def fun ( a ) :
a=10
b=2
fun(2)
print ( b ) #这里输出的还是2,我们并没有去改变b (这是传入不可变类型的对象)
2. 如果传入可变对象的时候,就相当于我们在传c++中的引用传递,我们如果穿list 或者字典。在函数里面去修改值,原来的参数也会随之发生改变
匿名函数
我们使用lambda来创建匿名函数,它只是一个表达式,我们可以在调用的时候给他传参,用法如下
分三个例子说明变量作用域问题:
例1:
例2:global声明全局变量
例3:nonlocal声明嵌套函数内部修改局部变量(python3中适用)
模块是一个python文件,以py结尾
导入模块的方式有三种:
1. import + 模块名
我们在使用的时候就可以使用 模块名 . 函数名
一个模块导入只有一次,无论执行多少次import
2. from 模块名 import 对象名
这个声明是将部分我们需要导入的函数或者变量导入进来
3. from 模块名 import *
将一个模块所有内容导入进来
我们可以使用try+except来捕获异常
我们只需在try中执行我们需要保护的代码,在except中去测试是否有误,如果有误我们也不会终端我们的代码
如果在except中不写错误类型,我们就默认所有错误类型
try-finally 机制,为finally里面的代码块无论如何都会执行,哪怕前面有return 退出函数,他也会执行完finally代码后,再去return
我们也可以自己去主动抛出异常,让except捕获:
Python中特殊语法:
闭包: 在函数嵌套中使用
filter函数用于过滤序列,过滤掉不符合条件的元素
filter ( function, 可迭代对象) 其中函数为判断函数,将结果为真的组成一个序列返回
reduce函数,用于对参数序列中元素进行累积(这里不能理解为累计相加!,用传给reduce中的两个元素进行操作,得到*的结果在于第三个数据给函数运算,最后得到一个结果)
map函数,会对指定序列进行函数操作,并返回一个列表
这里简单的知道
显示本地相应时间:
import time 导入time模块
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime() ))
文件操作和c语言的文件操作基本一致
我们进行文件操作必须先的到一个文件对象,才能去进行相关的操作
先来看open函数