函数的调用方式和参数

def func(x,y):
.....

func(19,20) # 直接调用
new=func(19,30) # 表达式调用
def delete(a,b):
return func(a,b) #作为返回值调用

函数的参数

  • 按功能分和位置分

    • 形参def func(x,y)这里的:x,y
      • 需要在函数调用时传递进去
      • 只在函数内部生效
    • 实参func(8,9) 这里的:8,9
      • 调用函数时放进去的实际值
      • 可以按位置或关键字传递
      • 可以使表达式,常量,变量
  • 按位置传参情况

    • 有位置,不传参数,报错
    • 没有位置,多传参数,报错
    • 位置参数必须按位置传递值,换位置就会导致函数内的参数错位
  • 按关键字传参情况

    • 关键字传递参数时,要指定函数定义时的位置参数

    • 允许按位置传递参数

    • 允许不按位置传递

    • 可以混合用,混用时位置参数必须放关键字前面

    • 默认参数可以不给值,不传值就是默认值,传值就用传递的值,必须放在最后

    • 顺序:

    • 位置参数>关键字参数>默认参数
      

可变长位置参数

  • 定义:*args

  • 作用:解决多传位置参数问题

    • 可以用一个变量解决超出指定参数个数的参数,

    • 用元组接收

    • 放在默认参数后面

    • 关键字是*

    • *是解包语法

    • print(*'dream')
      输出:
      d r e a m
      
  • def func(x,y,z='',*args)

可变长关键字参数

  • **kwargs
  • 接收多余的关键字传参
  • 放在*arg后面
  • 返回字典
  • 字典可以用*解包,得到所有key
  • 字典不能用**解包

命名关键字参数

  • def fun(x,y,z='',*,a,b)
    
  • *前参数可以使用位置传参或者关键字传参,但是 **之后的参数必须按照关键字传递

  • *后面的参数,默认参数允许放在位置参数之前

  • 不能跟*args,或者**kwargs 连用

混合使用

  • 顺序
  • 位置>默认>*args>**kwargs

类型提示

  • optional 语法

  • 注解:定义函数时指定参数类型

  • 基本数据类型注解:在形参后(:类型)

    • 不可变:是一种弱类型约束,是建议,不强制

      • 字符串def fun(name:str)
      • 数字 def fun(name:int)
    • 可变from typing import Dict,List,Tuple,Set

      • 列表

      • 字典

        • from typing import Dict
          def func(x:Dict[str,int]) x是个字典参数,期待键是str,值是int
          
      • 元组

      • 集合

    • 约束函数返回值类型

    • def func(x,y)-->int #约定返回值为int类型
      	return 
      
    • from typint import Uion
      def func(x,y)-->Uion[int,str ]#约定返回值为int类型或者str
      	return
      
    • #返回可选参数类型
      from typing import Optional
      def func(x,y)->Optional[int]
      
posted @ 2024-04-12 11:01  zenopan  阅读(10)  评论(0编辑  收藏  举报