Day04之python基础语法(六)

python基础语法之函数

一、描述
  • 作用:将面向过程的代码变得模块化,能够实现重复调用
  • input(输入函数)、print(输出函数)、type()等
二、案例
    1. 先计算1~100的和
sum = 0
for i in range(1, 101):
    sum += i
  • 2.在计算1~1000的和
sum = 0
for i in range(1, 1001):
    sum += i
三、函数的语法
  1. 使用def关键字定义函数,def后面跟函数名(本质:变量)、圆括号和冒号。
  2. 圆括号中放形参**(形参是向函数内部传参的变量)。**
  3. 函数内部代码块通常第一行写多行注释,作为解释函数作用的注释。
  4. 代码块结束以后,使用return将函数内部产生的结果返回到函数外部
  5. 函数定义完,使用函数时叫做调用函数,如何调用?函数名后面跟圆括号
  6. 调用函数时需要在圆括号中写实参传递给形参。
四、自定义计算start到end的和函数
def rangeSum(start, end):
    """计算某个范围的和"""
    sum = 0
    for i in range(start, end + 1):
        sum += i
    # print(sum)
    return sum


# 调用函数
print(rangeSum(1, 100))
print(rangeSum(1, 1001))
  • 函数可以降低代码的冗余度,也可以给代码阅读者更清晰的思路(一个函数代表一个功能)。
五、return函数
  • 作用:

    1. 能够将函数内部产生的结果返回到函数外部。
    2. 能够结束函数的执行。
  • 练习:将判断一个年份是否是闰年的代码封装成函数。

def isLeapYear(year):
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        return '闰年'
    else:
        return '平年'


# for i in range(1, 2023):
#     print(isLeapYear(i))	# 打印1-2022年之间所有的闰年

print(isLeapYear(2008))

总结:封装函数(自定义函数)在不改变原有代码执行逻辑、顺序的基础上做封装。

六、 函数执行的顺序
  • 从调用函数开始执行,函数定义时,程序不参与执行。

函数的参数

一、默认值参数
  • 自定义一个函数,函数的功能是计算某个范围中整数的和,默认计算1~100的和,或者也可以自定义范围计算和。
def rangeSum(start=1, end=100):
    sum = 0
    for i in range(start, end + 1):
        sum += i
    return sum

print(rangeSum())
print(rangeSum(200, 1000))
二、 位置参数
  • 形参和实参之间的顺序需要一一对应。
print(rangeSum(100, 1000))
print(1, 2, 3, 4, sep=' ', end=' ')
print('|', '\t', 1, 2, 3, 4)
三、 关键字参数
  • 形参和实参之间对应关系。
  • 可以脱离顺序对应关系。
  • 传递方式:调用函数是,rangeSum(形参1=值1, 形参2=值2)。
print(rangeSum(start=100, end=1000))
print(rangeSum(end=1000, start=100))
  • 那个形参等于什么值相当于在调用函数时提前规定好。
四、 位置参数和关键字参数混用
  • 位置参数必须在前面,关键字参数在后面。
def numSum(x, y, z):
    print(f'x:{x} y:{y} z:{z}')
    return x + y + z

print(numSum(10, 20, z=30))
print(numSum(10, z=50, y=20))

# print(numSum(z = 20, y = 10, 1))  -->语法错误,位置放错。
五、 不定长参数(带*号的变量)
  • 不定长参数包含:*args, **kwargs
  • 一个*的不定长参数必须放在两个**的不定长参数前面。
def selfTest(*args, **kwargs):
    # pass不参与程序执行,仅仅是你保证代码结构的完整性
    # pass
    print(args, kwargs)
  • 传参:
    a. 一个*的不定长参数只能接收“位置参数”;
    b. 两个**的不定长参数只能接收“关键字参数”。
  • 为什么要使用不定长参数?
    答:因为不定长参数可以一次性传入N个参数(N>0),可以解决实参和形参数量不一致的问题。
selfTest(1, 2, 3, 4, x=1, y=2, z=3)
  • *args接收位置参数后将所有数据转换为一个元组。
  • **kwargs接收胡关键字参数后将所有数据转换为一个字典。
六、 参数指定数据类型
  1. 给形参赋予一个默认值,默认值是什么数据类型等于传参的数据类型。
  2. 直接以“冒号数据类型(形参:int)”的形式创建形参。
  3. 在定义函数时使用“–>int”表明此函数返回什么数据类型。
def rangeSum(start=1, end=100) -> int:
    sum = 0
    for i in range(start, end + 1):
        sum += i
    return sum

rangeSum()      # 报错,未传参
# rangeSum(1, 100)
# --------------------
def rangeSum(start: int, end: int) -> int:
    sum = 0
    for i in range(start, end + 1):
        sum += i
    return sum

rangeSum()     # 报错,未传参
# rangeSum(1, 100)

全局变量和局部变量

一、 全局变量
  • 从变量定义开始到程序结束,整个范围都是全局变量的作用域。
二、 局部变量
  • 在函数或类中创建的变量,从函数或类中变量定义开始到函数或类结束,此范围是局部变量的作用域。
a = 0
def selfTest():
    print(a)
    b = 1
    print(b)

selfTest()
print(a)
# print(b)      # NameError: name 'b' is not defined
三、 局部变量的作用或意义?
  • 局部变量创建于函数或类中,当函数或类被调用时局部变量才开始创建。
  • 当函数或类结束时,局部百年来那个被销毁。
1.global 和 nonlocal
x = 100
def func1(x):
    print(x)  # 100
    x = 0
    print(x)  # 0

func1(x)
print(x)  # 100
2. global:在函数内部修改全局变量
  • 语法:
global 全局变量
变量 = 值
y = 100
def func2():
    global y
    y = 666

func2()
print(y)
3.nonlocal:在函数A的函数B中修改函数A的变量
  • 语法:
noncolal 局部变量
变量 = 值
def A():
    z = 0

    def B():
        nonlocal z
        z = 6

    B()
    print(z)

A()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃糖的小荣同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值