首页 > 编程语言 >Python__19--函数调用的参数传递与变量的作用域

Python__19--函数调用的参数传递与变量的作用域

时间:2022-12-31 19:31:33浏览次数:37  
标签:__ 10 20 作用域 30 函数调用 print fun def

1 函数调用的参数传递

形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,成为形参; 实参(实际参数): 在调用函数的时候输入的值。

实际参数和形式参数的参数名可以不同

1.1 参数传递的内存分析

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6c373c37b7bf4a5486f863e795fd6987~tplv-k3u1fbpfcp-zoom-1.image

  1. 不可变对象,在函数体内的修改不会影响实参的值
  2. 可变对象,在函数体内的修改会影响实参的值

1.2 函数的返回值

  • 如果函数没有返回值,return可以省略

  • 如果函数返回值是1个,直接返回类型

  • 如果返回值是多个,返回结果为元组

    def fun():
        return'[1,2,3]','hello','world'
    print(fun())
    # 输出:([1,2,3]','hello','world')
    

1.3 函数的参数定义

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4f47e82c32ed4ab5af69a766ea3f926a~tplv-k3u1fbpfcp-zoom-1.image

1.3.1 形式参数、定义

  1. 默认值参数

    只有默认值不同的时候才需要将实参传递给形参

    # 只有默认值不同的时候才需要将实参传递给形参
    def fun(a,b=10):    # b称为默认值参数
        print(a,b)
    fun(100)
    fun(20,30)
    # 输出:
    # 100 20
    # 10 30
    
  2. 个数可变的位置参数,结果为一个元组,使用*

    def fun(*args): 
        print(args)
    fun(10)
    fun(10,20,30)
    # 输出:(10,)
    # 输出:(10,20,30)
    
  3. 个数可变的关键字参数,结果为一个字典,使用**

    def fun(**a):
        print(a)
    fun(a=10)
    fun(a=10,b=20,c=30)
    # 输出:{'a':10}
    # 输出:{'a':10,'b':20,'c':30}
    
  4. 关键字形参,使用*

    def fun(a,b,*,c,d):    # 从*之后的参数,在函数调用时,只能采用关键字参数传递
        print('a=',a)
        print('b=',b)
        print('c=',c)
    fun(10,20,c=30,d=40)
    # 输出:
    # a= 10
    # b= 20
    # c= 30
    
  5. 个数可变的位置参数与个数可变的关键字参数同时存在

    def fun1(*args1,**args2):
    def fun2(a,b,*,c,d,**args2):
    def fun3(a,b=20,*args1,**args2):
    

1.3.2 实际参数、调用

  1. 位置实参

    根据位置将实际参数传递给形式参数

    calc(10,20)

  2. 将序列中的每个元素都转换为位置实参

    def fun(a,b,c):      
        print('a=',a)
        print('b=',b)
        print('c=',c)
    fun(10,20,30)
    lst=[11,22,33]
    fun(*lst)
    # 输出:
    # a=10
    # b=20
    # c=30
    # a=11
    # b=22
    # c=33
    
  3. 关键字实参

    根据形参名称将实际参数传递给形式参数

    calc(b=10,a=20)

  4. 将字典中的每个键值对都转换成关键字实参

    def fun(a,b,c):
        print('a=',a)
        print('b=',b)
        print('c=',c)
    fun(10,20,30)
    dic={'a':111,'b':222,'c':333}
    fun(**dic)
    calc(b=10,a=20)
    # a=10
    # b=20
    # c=30
    # a=111
    # b=222
    # c=333
    

1.4 变量的作用域

一般来说,在函数体外定义的变量叫全局变量,而在函数体内定义的变量叫做局部变量,C语言中也称为内部变量,而局部变量只能在这个函数内部使用,全局变量则是可以作用到整个文件(模块)的范围。

1.4.1 局部变量

函数体内进行定义的变量,无法在函数体外使用

def fun():
    global age
    age=20    
    print(age)
fun()
print(age)
# 使用global定义全局变量,必须先调用函数,该变量才能全局使用
# 输出:
# 20
# 20

1.4.2 全局变量

函数内外均可使用的变量

1.5 递归函数

自己调用自己的函数

# 递归通式:if终止条件,else第n项的通式
def fac(n):
    if n==1:                     #终止条件
        return  1
    else:
        return n*fac(n-1)        #递归调用

1.6 斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。 斐波那契数列指的是这样一个数列: 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711…… 它的规律是:这个数列从第 3 项开始,每一项都等于前两项之和。 在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*),显然,斐波那契数列是一个线性递推数列。

#1  1  2  3  5  8
def fib(n):
    if n==1:
        return 1
    elif n==2:
        return 1
    else:
        return fib(n-1)+fib(n-2)

标签:__,10,20,作用域,30,函数调用,print,fun,def
From: https://blog.51cto.com/husheng/5982206

相关文章

  • Metamask连接Geth本地测试链部署合约报错
    直接连接ExternalHttpProvider部署合约没有问题但是使用metamask连接测试网部署合约时报错errored:[ethjs-query]whileformattingoutputsfromRPC'{"value":{"cod......
  • 代码合并冲突解决
    1.拉取远程仓库代码gitpulloriginmaster--allow-unrelated-histories2.使用vscode自带插件保留当前代码,或者手动合并3.再次pushgitpushoriginmaster......
  • Allure04-用例优先级与链接
    用例优先级@allure.severity(用例优先级)表示测试用例的重要级别或错误的严重程度BLOCKER:中断缺陷,如客服端程序无响应,无法执行下一步骤CRITICAL:严重缺陷,如功能点缺......
  • 车站
    你好,陌生人。你好,明天。今天我就要踏上旅程,车票已经准备好了。没有喧闹而煽情的别离,没有父母的细心、唠叨地叮嘱,没有要去的方向。带上我的木吉他,留着飘逸的长发,吹着悠扬的......
  • C/S UDP通信实践踩坑记录与对于ICMP的进一步认识
    背景最近有个业务场景需要服务端(简称S)与客户端(简称C)设计一套基于UDP的通信协议--要求尽可能快的前提下可容忍一定丢包率,得以比较深入地学习和了解UDP通信和实践,在开发......
  • 哈希表与hashtable
    1.定义如果查找关键字时不需要比较就可以获得需要记录的存储位置,这就称作【散列技术】。它是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字......
  • Linux 监控和调试利器 Sysdig 入门教程
    Sysdig简介Sysdig官网上对自己的介绍是:OpenSourceUniversalSystemVisibilityWithNativeContaierSupport.它的定位是系统监控、分析和排障的工具,其实在Linux......
  • debian11用iso制作本地apt源
    摘抄记录,原文链接:https://blog.csdn.net/leejearl/article/details/122708953?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Ed......
  • 2022年总结--自动化测试框架设计
     一、自动化测试没那么简单简而言之,自动化测试就是利用脚本来完成重复、机械、繁重的手工测试。从使用功能的角度而言,自动化测试脚本既是一个工具,也是一款软件。因......
  • CF1770D Koxia and Game 题解
    47min时过C降智50min做不出D。果然晚上容易降智。题意不想复述,好长。linktoCF|linktoLuogu合理猜测留给后手的两个数字必须相等。证明为若不相等,则后手可以......