关于python函数形参、实参和变量作用域的分析

  大家都知道,程序代码行数一旦到一定程度,给变量、函数、类起名字是个头疼的问题。尤其函数还有形参、实参的问题。

这里面很容易产生引用错误,作用域错误的问题。看下面的例子:

def test(a):    a = 20    print("这是在调用函数之时的值: %s"%a)a = 10print("这是在调用函数之前的值: %s"%a)test(a)print("这是在调用函数之后的值: %s"%a)

运行结果:

  这是在调用函数之前的值: 10
  这是在调用函数之时的值: 20
  这是在调用函数之后的值: 10

结论:当变量重名时函数内部的变量会覆盖外部变量,因此尽量避免重名现象,虽然它能通过语法检查。

时间: 2024-08-10 15:05:16

关于python函数形参、实参和变量作用域的分析的相关文章

python函数(全局变量,局部变量,作用域,递归函数,高阶函数,匿名函数)

1.1函数 1.1.1什么是函数 函数就是程序实现模块化的基本单元,一般实现某一功能的集合.函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,进行一系列的逻辑运算return 返回值:函数的返回值能表示函数的运行结果或运行状态. 1.1.2函数的作用 函数是组织好的,可重复使用的,用来实现单一,或者相关功能的代码. 函数能够提高应用的模块性,和代码的重复利用率 我们已近知道python提供了许多内置函数,比如print(),我们自已创建的

Python函数之返回值、作用域和局部变量

一.函数返回值 说到返回值,相信大家肯定都认识,没错,就是return. 所谓返回值可以这样理解:函数外部的代码要想获取函数的执行结果,就可以在函数里用return语句把结果返回. 那具体怎么用呢?接着往下看: #!/usr/bin/env python3 #-*- coding:utf-8 -*- # write by congcong # return 表示一个程序的结束,他可以返回任意的元素,列表或字典 def stu_info(name,age,course): print(name,a

JavaScript函数定义和调用 变量作用域

本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 JavaScript中函数定义可以是这样的格式 function 函数名(参数) { 函数体 } 也可以是这样的格式 var 函数名 = function (参数) { 函数体 }; 关键字一:arguments 获取全部参数 只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数.arguments类似Array但它不是一个Array.第一个参数是arguments[0]....[n] 关键字二:rest 获取 获取除了已定

python函数的动态传参.作用域与命名空间

一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi(good_food = "胡辣汤") # 关键字传参 chi("胡辣汤", "疙瘩汤", "西红柿鸡蛋汤") chi("大猪蹄子","大汉堡","薯条","圣

python 函数的名称空间及作用域

一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周期为:在python解释器启动时创建,在解释器关闭时销毁 全局名称空间:除了内置的,函数内的都是在全局名称空间中 生命周期为:在执行文件时,创建全局名称空间,所有文件中的代码全部执行完毕后,销毁名称空间(即解释器关闭时) 局部名称空间:只要在函数内的名称空间就是局部的 生命周期为:调用函数时创建,函

python函数——形参中的:位置参数,关键字参数,默认参数,*args 和 **kwargs的关系

位置参数:按照参数位置依次赋值 def foo(a,b,c): print("a:" + a) print("b:" + b) print("c:" + c) foo("aaa","bbb","ccc") 运行结果: a:aaa b:bbb c:ccc 关键字参数:用于函数调用,通过"键-值"形式加以指定.可以让函数更加清晰.容易使用,同时也清除了参数的顺序需求. #

python函数——形参中的:*args和**kwargs

多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照关键字传值把多余的传值以字典的方式呈现 *args:(表示的就是将实参中按照位置传值,多出来的值都给args,且以元祖的方式呈现) 示例: def foo(x, *args): print(x) print(args) foo(1, 2, 3, 4, 5) #其中的2,3,4,5都给了args 执行结果: 1 (2, 3, 4, 5) 当args与位置参数和默认参数混用的情况下:(注意三者的顺序) 示例一.(三者顺序是:位置参

python 函数形参四种格式

1:f(a,b) 2:f(a,b=value)有默认值的参数必须在后面 3:f(*a)多个参数直接传进一个元组 4:f(**a)以keys=values 形式给参数,传入转换为字典 def test(x,y=5,*a,**b): print x,y,a,b 就这么一个简单函数,来看看下面对这个函数调用会产生什么结果: test(1) ===> 1 5 () {} test(1,2) ===> 1 2 () {} test(1,2,3) ===> 1 2 (3,) {} test(1,2,

javascript 闭包与函数变量作用域

浏览器事件循环工作原理 浏览器有一个事件循环用于检查事件队列,处理延时的事件.UI事件(例如:点击,滚动等),ajax回调,以及提供给setTimeout()和setInterval()的回调,都会依次被事件循环处理. 因此,当调用setTimeout()函数时,即使延迟的时间被设置为0,提供的回调也会被排队 回调会呆在队列中,直到指定的时间用完后,引擎开始执行动作(如果它当前不执行其他动作) 因此,即使setTimeout()回调被延迟0ms,它仍然会被排队,并且直到函数中其他非延迟的语句被执