一,函数
1.函数的作用:
将面向过程的代码变得模块化,能够实现重复调用。
input , print , type 等都是函数
2.函数的语法
‘’’ 1.使用def关键字定义函数,def后面跟函数名(本质:变量),圆括号和冒号 2.圆括号中放形参(形参是向函数内部传参的变量) 3.函数内部代码块通常第一行写多行注释,作为解释函数作用的注释。 4.代码块结束以后,使用return将函数内部产生的结果返回到函数外部 5.函数定义完,使用函数时叫做调用函数 6.调用函数时需要在圆括号中写实参传递给形参 ‘’
自定义计算x到y的和的函数:
def rangeSum(x, y):
# 计算某个范围的和的函数
sum = 0
for i in range(x, y + 1):
sum += i
return sum
# 调用函数
print(rangeSum(1, 1000))
函数: 可以降低代码的冗余度,同时也可以给代码阅读者更加清晰的思路(一个函数代表一个功能)
3. return的作用
1.能够将函数内部产生的结果返回到函数外部。 2.能够结束函数的执行。
练习: 判断从1年到现在的年份是否是闰年
def years(x):
if x % 4 == 0 and x % 100 != 0:
return '%d年是闰年' % x
elif x % 400 == 0:
return '%d年是闰年' % x
else:
return '%d年是平年' % x
for i in range(1, 2023):
print(years(i))
总结:封装函数(自定义函数)在不改变原有代码执行逻辑,执行顺序的基础上做封装
函数执行的顺序: 从调用函数开始执行,函数定义时,程序不参与执行。
二,函数的参数
1.默认值参数
自定义一个函数,函数的功能是计算某个范围中整数的和,默认计算1-100的和 或者也可以自定义范围计算和
def rangeSum(x=1, y=100):
sum_ = 0
for i in range(x, y + 1):
sum_ += i
return sum_
print(rangeSum())
print(rangeSum(200, 1000))
2.位置参数
形参和实参之间的顺序需要一一对应
3.关键字参数(可以脱离顺序对应关系)
形参和实参之间的对应关系 关键字参数传参方式: 调用函数时:rangeSum(形参1=值1,形参2=值2)
4.位置参数和关键字参数混用
位置参数必须在前面,关键字参数在后面。
5.不定长参数(带*的变量)
不定长参数包含: args, **kwargs 一个的不定长参数必须放在两个*的不定长参数前面
*args接收位置参数后将所有数据转换为一个元组。 **kwargs接收关键字参数后将所有数据转换为一个字典。
6.参数指定数据类型
a.给形参赋予默认值,默认值是什么数据类型等于传参的数据类型 b.直接以“冒号数据类型(形参:int)”的形式 c.在定义函数时使用“->int” 表明此函数返回什么数据类型
三,全局变量和局部变量
按照作用域的不同可以将变量分为全局变量和局部变量。
1.全局变量
从变量定义开始到程序结束,整个范围都是全局变量的作用域。
2.局部变量
在函数或者类中创建的变量,从函数或类中变量定义开始到函数或类结束,此范围是局部变量的作用域
a = 0 # 全局变量
def selfTest():
print(a)
b = 1 # 局部变量
print(b)
selfTest()
print(a)
3.局部变量的作用或意义?
‘’’ 局部变量创建于函数或类中,当函数或类被调用时局部变量才开始创建 当函数或类结束时,局部变量被销毁 ‘’’
4.global 和 nonlocal
global: 在函数内部修改全局变量 ‘’’ global 变量 变量 = 值 ‘’’
nonlocal: 在函数A的函数B中修改函数A的变量 ‘’’ nonlocal 变量 变量 = 值 ‘’’