Python——入门进阶之函数

一:性质:

        1.解决代码复用问题

         2.尽可能地细化函数

        3.一段功能代码的分装

         4.分类:有无参数 有无返回值 定义者:系统函数(官方提供的api)、自定义函数、第三方开发者

        5.函数在调用时的内存是一个瞬时内存

        6.局部变量和全局变量:

                 1>全局变量:直接定义在模块的变量,作用域横跨全局 函数本身是一个全局变量 Python中不能在内部修改全局变量,如果需要更改,则一定要使用global关键字

                  2>局部变量:本地变量,函数内部定义的变量 在函数内部定义的形式参数是局部变量

二:函数的定义:

        1.有无参数

# 有无参数
def p(name, address, gender):
    """
    打印个人信息
    没有返回值
    """
    print(f"大家好,我叫{name}")
    print(f"我家住在{address}")
    print(f"我是一个{gender}")


print(help(p))  # 可以调用函数如何定义,函数里的返回值和各种帮助文档
print(p.__doc__)  # 用魔法属性只会调用函数的帮助文档

p("wxx", "河南", "girl")    # 调用函数,其在调用时可以不传参,返回值(return)可能会有

        2.有无返回值


# 有无返回值
def add(a, b):
    """
    求两个数的和
    返回值:和
    """
    return a + b  # return关键字会返回结果的同时结束函数


num1 = float(input("请输入:"))
num2 = float(input("请输入:"))
res = add(num1, num2)  # 会执行压栈
print(res)

三:参数:

        1.默认值参数: 在函数定义时,如果某一个或者某一些参数,在大多数调用情况下使用,我们为了减少调用麻烦,可以设置默认值参数

# 默认值参数
def s(r, pi=3.14):   # 普通参数(位置参数)要在特殊参数的前面,否则会报错
    """
    求圆的面积
    """
    return pi * r ** 2


radius = float(input("请输入圆的半径:"))
area = s(radius, 3.14)
print(area)

area = s(radius, 3.1416)
print(area)

area = s(radius)   # 使用的是默认值参数
print(area)

        2.可变参数: *形参(多余的参数会变成元组显示出来)

# 可变参数
def l(x, y, z, *args):
    """
    求多边形周长
    """
    print(args)    # 可以传多个参数
    return x + y + z


nums = input("请输入多边形的周长:").split()  # 利用切片让数据可以连续输入(也就是不会自动回车)
nums = [int(i) for i in nums]  # 将输入的值,通过下标和循环存在列表中
c = l(nums[0], nums[1], nums[2])
# 将列表中的值通过下标传入调用的函数中
# 可以传入多个值,不会报错,且多余的值会以元组的形式进行显示
print(c)  # 输出键盘上传入值的函数结果


# 改进(可变参数)
def l(x, y, z, *args):
    """
       求多边形周长
    """
    m = 0
    if len(args) > 0:    # len函数是全局函数,可以访问各种数据类型
        for n in args:
            m += n
    return x + y + z + m


nums = input("请输入多边形的周长:").split()
nums = [int(i) for i in nums]
c = l(nums[0], nums[1], nums[2])
print(c)

        3.关键字参数(命名参数): **形参(打印时会自动转成字典)

# 命名参数
def l(**kwargs):   # 会自动转成字典
    print(kwargs)
    print(kwargs.get("age", 0))   # 取字典的值,传一个默认值(0)防止报错
    return


l(age=20, name='wxx')

        4.参数: 默认参数(位置参数) > 默认值参数 > 可变参数 > 关键字参数(命名参数)

四:值传递与引用传递

        1.值传递: 仅仅给函数传递变量的值

# 值传递
def add(x, y):
    x += 10
    y += 100
    print(x)    # 30
    print(y)    # 300
    return x + y


x = 20
y = 200
res = add(x, y)
print(x)    # 20
print(y)    # 200
print(res)  # 330

        2.引用传递: 将地址传递给函数,都指向同一块内存区域

# 引用传递
def arr(nums):
    """
    传递引用【指针,对象,地址】
    """
    print(nums)    # [1, 3, 5]
    nums.append(520)
    nums.append(1314)
    print(nums)    # [1, 3, 5, 520, 1314]


nums1 = [1, 3, 5]
arr(nums1)
print(nums1)   # [1, 3, 5, 520, 1314]

        3.函数间的相互传递


# 函数的互相传递
def demo(a, b):
    a(b)


def demo2(m):
    print(m)


demo(demo2, 5201314)

# 简化
demo2(5201314)

demo(print, 5201314)

五:匿名函数

        1.匿名函数(lambda):没有名称的函数

                                                 lambda[参数列表]:函数体


# 匿名函数
def demo(a, b):
    a(b)


demo(lambda info: print(info), 5201314)

 lambda表达式用来做匿名函数和单行函数

        2.map函数:通过映射将利用可迭代对象的性质进行转换、利用自定义转换函数的性质


# map函数
a = input("请输入:").split()
print(a)
# 请输入:1 2 3     ['1', '2', '3']

b = map(lambda m: int(m), a)  # 将键盘上输入的列表的值通过lambda转为map对象
# 第一个参数的函数,会自动的接受每一个返回的值,正好可以通过强制类型转换修改它的类型
# 简化:b = map(int, a)
n = [i for i in b]
print(n)

 map就是映射的意思,就是把一些值,映射成另外的值,映射规则自己定,自己写什么规则就是什么规则

        3.将列表中作为字符串的值转换为int类型

map(int, input().split())

[int(i) for i in input().split()]

六:声明:

# python声明式类型
def arr(nums: list):  # 用 -> 代表了函数的返回值
    """
    传递引用【指针,对象,地址】
    形参后面声明类型方便后续代码书写
    """
    print(nums)
    nums.append(520)
    nums.append(1314)
    print(nums)

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值