python-函数、文件、异常、模块

目录

函数

返回值

函数传参

位置参数

关键字传参

缺省参数

不定长参数

匿名函数

 文件操作

open 函数

异常

模块

导入模块


函数

返回值

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模块的所有内容,就是函数调用时语法有区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值