如有错误,敬请更新!!!
函数的概述:将一串代码打包成一个包,为了以后方便使用
函数的定义:使用关键字(保留字)def来定义
def my_function():
# 函数体
print("Hello, World!")
函数的调用
# 定义一个函数,它接受两个参数并返回它们的和
def add_numbers(a, b):
result = a + b
return result
# 调用函数,并传递两个参数
sum = add_numbers(5, 3)
# 打印函数返回的结果
print("The sum is:", sum)、
函数的传递:
定义函数时设置的参数为形式参数(形参),调用函数时传入的参数为实际参数(实参)
传递本质是将实参发送给形参(将外面的数传到函数里面)
def get_max(a, b):
if a > b:
print(a,"是较大的值!")
else:
print(b,"是较大的值!")
get_max(8, 5)
在上述代码中,8这个实参传给形参a,5这个实参传给形参b(原理为实参=形参)
默认参数的传递:在定义函数时就给了函数一个变量值
# 定义一个函数,其中第二个参数有一个默认值
def greet(name, greeting='Hello'):
print(greeting, name)
# 调用函数时不提供第二个参数,使用默认值
greet('Alice')
# 调用函数时提供第二个参数,覆盖默认值
greet('Bob', 'Hi')
!参数的打包:通常使用星号(*)操作符来完成。当你在函数调用时使用星号前缀一个变量名,Python会将这个变量中包含的序列解包为独立的参数。
def print_info(*args):
for arg in args:
print(arg)
# 打包一个列表作为参数传递
info = ["Alice", 30, "Engineer"]
print_info(*info) #输出:Alice 30 Engineer
!参数的解包:通常在函数定义时使用星号(*)操作符来完成。当你在函数定义的参数列表中使用星号前缀一个参数名,这个参数会收集所有未命名的位置参数到一个元组中
函数的返回值:return语句
在函数结束的时候将数据返回给程序,如果没有使用return语句将会默认返回None
def add(a, b):
result = a + b
return result # 返回两个数的和
# 调用函数并打印结果
print(add(3, 4)) # 输出: 7
变量作用域:根据作用域的不同,变量可以划分为局部变量和全局变量。
局部变量:只能在函数的内部使用,函数结束后就没有了
def calculate_sum(a, b):
total = a + b # 定义了一个局部变量 total
print("Inside function:", total)
return total
result = calculate_sum(5, 3) # 调用函数
print("Outside function:", result)
# 尝试访问 total 将导致错误,因为 total 是局部变量
# 若print(total) # 则这将抛出错误
全局变量:在整个程序中都会起作用,
全局变量在函数中只能被访问,如下错误代码
number = 10 #全局变量已经声明
def test_one():
print(number) #错误,全局变量不能在函数中使用
number += 1
test_one()
print(number)
global和nonlocal关键字(保留字)
global:声明这是个全局变量
# 全局变量
global_value = 10
def modify_global():
global global_value # 声明 global_value 为全局变量
global_value += 5
modify_global() # 修改全局变量
print(global_value) # 输出: 15
以上代码就可以做到全局变量在函数内,并且在函数外修改全局变量
nonlocal:声明这是个非局部变量(何时用?需要在函数嵌套函数中使用,即内层函数内存在外层函数)
def outer():
outer_var = 20
def inner():
nonlocal outer_var # 声明 outer_var 为非局部变量
outer_var += 10
inner()
print(outer_var) # 输出: 30
outer()
递归函数:计算阶乘时
def factorial(n):
# 递归终止条件
if n == 0:
return 1
# 递归步骤
else:
return n * factorial(n-1)
# 调用函数
print(factorial(5)) # 输出: 120
计算兔子数列:斐波那契数列是一个每个数都是前两个数之和的序列,通常定义为F(0) = 0, F(1) = 1,且F(n) = F(n-1) + F(n-2)。
def fibonacci(n):
# 递归终止条件
if n in (0, 1):
return n
# 递归步骤
else:
return fibonacci(n-1) + fibonacci(n-2)
# 调用函数
print(fibonacci(6)) # 输出: 8
文件标识:(文件的位置+文件的名字)
文件类型:文本文件和二进制文件,实际上计算机中的数据在物理层面都以二进制形式存储
文件的打开:open()
格式:open(file, mode='r')
file:文件的路径,如'D:\学习',需要用转义符D:\\学习
mode:文件的打开模式,常见的有'r'只读,'w'覆盖文件写,'a'追加文件。若需要打开二进制文件则时'rb','wb','ab'
'r+'读写打开,'w+'读写打开,但是覆盖整个文件,'a+'读写追加
关闭文件:close()
file.close()
文件打开后一定要记得关闭,不然持续的打开会逐渐占用内存,还会使得操作者不知道当前操作文件
with语句:打开和关闭同时jinxing
with open('a.txt') as f: #f为变量
文件的读:raed(),readline(),readlines()
read():用于读取文件指定字节的数据
with open('file.txt') as f:
print(f.read()) #读取全部数据
print(f.read(2)) #读取两个字节的数据
readline():用于读取一行的数据
readlines():用于读取文件的全部数据
文件的写:write(),wirtelines()
write():将指定字符串写入文件,若数据写入成功,write()方法会返回本次写入文件的数据的字节数。
string = 'hello world'
with open('file.txt',mode='a') as f:
new_file = f.write(string)
print(new_file) #输出:11
writelines():若写入文件的数据在文件中需要换行,需要显式指定换行符。
string = '\nhello world'
with open('file.txt',mode='a') as f:
new_file = f.writelines(string)
print(new_file) #文件内的数据将会换行在输入hello world
文件的定位读写:tell(),seek()
tell():可以获取文件当前的读取位置
with open('file.txt') as f:
print(f.tell()) #输出:0 # 获取文件读写位置
print(f.read(5)) # 利用read()方法移动文件读写位置
print(f.tell()) #输出:5 # 再次获取文件读写位置
seek():可以控制文件读写位置
格式:seek(offset, from)
offset:表示偏移量,即读写位置需要移动的字节数。
from:用于指定文件的读写位置,该参数的取值为0、1、2。
seek()方法调用成功后会返回当前读写位置。需要以二进制打开文件(即mode='rb')
with open('file.txt','rb') as f:
f.seek(5,0)
f.seek(3,1)
文件与目录管理:需要使用os模块(即import os)
可实现以下操作
删除文件——os.remove(文件名)
文件重命名——os.rename(原文件名,新文件名)
创建/删除目录——os.mkdir(目录名)/os.rmdir(目录名)
获取当前目录——os.getcwd()
更改默认目录——os.chdir(路径名)
获取目录列表——os.listdir(目录/路径)