目录
函数
返回值
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None
#定义函数
def add(x,y):
return x+y
print(add(3,5)) #函数调用
函数执行到了retrun语句,就表示函数结束了,不一样的是,python支持return多个数据
#计算x,y,z三个数据的平方
def fun(x,y,z):
return x**2,y**2,z**2
#使用三个变量 接收函数返回的三个结果
x,y,z=fun(8,3,4)
print("x=",{x},"y=",{y},"z=",{z}) #x= {64} y= {9} z= {16}
函数传参
- 位置参数
- 关键字参数
- 不定长参数
- 缺省参数
位置参数
根据函数调用时的参数位置,默认对应传参
fun(8,3,4)
默认函数形参中:第一个参数=8,第二个参数=3,第三个参数=4
关键字传参
函数调用使用关键字参数来确定传入的参数值。
def fun(x,y,z):
return x**2,y**2,z**2
x,y,z=fun(x=2,y=4,z=8)
print("x=",{x},"y=",{y},"z=",{z})
缺省参数
设置形参默认值
要求:缺省参数是放在了形参的最后
#给age设置了默认值
def printf(name,age=18):
print("name=",{name},"age=", {age})
#当传入age,形参值会被覆盖
printf("张三",20) # 结果 name= {'张三'} age= {20}
#不传入age,会使用默认值
printf("李四") #结果 name= {'李四'} age= {18}
不定长参数
不确定形参的多少,可以输入多个数据
- 位置传参
默认使用*args来接收传入的实参,将数据以元组的形式存放
#位置传参 不定长参数
def fun(*agrs):
print(type(agrs))
print(agrs)
fun(1,2,3,"张三","23456")
- 关键字传参
默认使用**kwargs来接收传入的实参,将数据以字典的形式存放
def fun (**kwargs):
print(type(kwargs))
print(kwargs)
fun(name="张三",password=123)
匿名函数
python 使用 lambda 来创建匿名函数。
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
#定义函数 实现相加功能
#sum为函数名 x,y为变量 x+y为返回结果
sum=lambda x,y : x+y
# 调用sum函数
print( "相加后的值为 : ", sum( 10, 20 ))
文件操作
1、打开文件
open 函数
先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
语法:
file object = open(file_name [, access_mode][, encoding])
各个参数的细节如下:
- file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
- access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
- encoding:指定文件的编码方式,推荐utf-8
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 如果文件不存在,报错 |
1、文件读取
#1、以只读方式打开文件
f=open("C:\\Users\\30283\\Desktop\\练习.txt","r",encoding="utf-8") #f变量 是文件类型的对象
print("读取文件信息",{f.read()}) #f.read() 读取文件信息
print("读取文件的前10个字节",{f.read(10)}) #f.read() 读取文件信息的前面10个字节
print("------------")
f.close() #关闭文件
f=open("C:\\Users\\30283\\Desktop\\练习.txt","r",encoding="utf-8") # 重新打开文件 防止文件指针已经移动到了末尾,导致读不出来数据
lines =f.readlines() #读取文件的所有内容 封装成为列表
print(type(lines))
print(lines) #如果不重新打开文件,这里为空 因为上一次读取之后,文件指针移动到了结尾,这时从文件指针后继续读取,肯定读取不到信息
f.close() #关闭文件
print("----------")
f=open("C:\\Users\\30283\\Desktop\\练习.txt","r",encoding="utf-8")
line=f.readline() #一行一行的读取数据
while line:
print(line)
line=f.readline()
f.close() #关闭文件
2、文件内容写入
f.write():将内容写入程序的内存空间(也称为缓冲区)(不直接写入文件,是为了避免重复的读取硬盘,降低性能)
f.flush():将缓冲区的内容写入文件
f.close()释放文件,内置了f.flush(),关闭的时候会进行内容刷新
#w方式:当文件不存在,创建文件 文件存在,删除之前的所有内容 重新写入
f = open("C:\\Users\\30283\\Desktop\\写入.txt", "w", encoding="utf-8")
f.write("你好\n") #内容写入缓冲区
f.flush() #数据写入文件
f.close()
#结果 创建文件 并写入内容 你好
#a方式:当文件不存在,创建文件 文件存在,追加写入
f = open("C:\\Users\\30283\\Desktop\\写入.txt", "a", encoding="utf-8")
f.write("hello\n") #内容写入缓冲区
f.flush() #数据写入文件
f.close()
#结果 内容追加 你好 hello
异常
异常简单来说就是bug
比如说我们除0操作,就会抛出除0异常
如果遇到了异常,程序就会终止运行,我们可以通过捕捉异常,在异常发生时进行其余操作
捕捉异常的基本语法:
try:
可能出现异常的代码
except:
出现异常之后处理的代码
finally:
不论是否有异常,一定会执行的代码
#计算一个数的倒数
while(True):
num=input("请输入整数数字作为分母\n")
try:
print(1/int(num))
break
except :
print("数据输入格式错误,请重新输入")
当输入0时,除0异常,异常被捕捉,进入except语句; 当输入0.4时,因为int()不能将带有小数点的字符串转化为整数类型,数据转化异常,异常被捕捉,进入except语句。
捕捉特定异常
while(True):
num=input("请输入整数数字作为分母\n")
try:
print(1/int(num))
break
except ZeroDivisionError as e: #只会捕捉ZeroDivisionError的异常,其余异常不会捕捉 e会存储报错信息
print(e)
print("数据输入格式错误,请重新输入")
Exception类是所有异常的父类,可以捕捉捕捉所有异常
finally语句
finally语句的代码,无论发没发生异常都会被执行
模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。我们可以通过引入模块,调用这个模块内部的方法,从而不需要自己实现
导入模块
不管你执行了多少次import,一个模块都只会被导入一次。这样可以防止导入模块被一遍又一遍地执行。
基本语法
from [模块名] import [模块|类|变量|函数] as 别名
模块内容调用语法
模块名.功能名()
#比如说 存在math模块,包含一些数学操作 我们可以借助这个模块,帮助我们快速实现功能
#1、导入模块
import math
#引用模块内的函数 开平方
print(math.sqrt(4))
from…import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
from 模块名 import 功能名
from math import sqrt
print(sqrt(4))
这个声明不会把整个 math 模块导入到当前的命名空间中,它只会将 math 里的 sqrt 单个引入到执行这个声明的文件。
from…import* 语句
把一个模块的所有内容全都导入到当前的命名空间,只需使用如下声明:
from 模块名 import *
例如我们想一次性引入 math 模块中所有的东西,语句如下:
from math import *
from math import *
print(sqrt(4)
这个语句和import math都可以导入math模块的所有内容,就是函数调用时语法有区别