Python按值传递参数和按引用传递参数

Python按值传递参数和按引用传递参数:

按值传递参数:

使用一个变量的值(数字,字符串),放到实参的位置上

注:传递过去的是变量的副本,无论副本在函数中怎么变,变量的值都不变

传递常量:

# 传递常量

# 定义一个函数,输出 欢迎,接收到的参数 name
def huanying(name):
    print("欢迎",name)
huanying("小明")
# 欢迎 小明

# 定义一个求长方形面积的函数,要求具有返回值且参数为 height 和 width
def area(height,width):
    return height * width

mianji = area(5,4)
print(mianji)
# 20

传递变量:

# 传递变量

# 定义一个函数,输出 欢迎,接收到的参数 name
def huanying(name):
    print("欢迎",name)
strs_name = "小明"
huanying(strs_name)
# 欢迎 小明

# 定义一个求长方形面积的函数,要求具有返回值且参数为 height 和 width
def area(height,width):
    return height * width
height = 5
width = 4

mianji = area(height,width)
print(mianji)
# 20

按引用传递:

输出 列表、元组 和 集合所有元素的总和

# 按引用传递

lst = [1,2,3,4]
tuple_1 = (4,5,7)
se = {9,6,5,8}

def add(args):
    ‘‘‘将 args 中的元素总和输出‘‘‘
    print(sum(args))

add(lst)
# 10
add(tuple_1)
# 16
add(se)
# 28

# 输出程序的注释
print(add.__doc__)
# 将 args 中的元素总和输出

使用函数,将参数引用传递输出参数中的奇数

# 按引用传递

lst = [1,2,3,4]
tuple_1 = (4,5,7)

def jishu(args):
    ‘‘‘将 args 中的奇数输出‘‘‘
    for i in range(len(args)):
        if args[i] % 2 == 1:
            print(args[i], end = " ")
    print()
jishu(lst)
# 1 3
jishu(tuple_1)
# 5 7 

# 输出程序的注释
print(jishu.__doc__)
# 将 args 中的奇数输出

 如果参数发生修改

  1.原参数如果为可变类型(列表、集合、字典)则也跟着修改

  2.原参数如果为不可变类型(数字、字符串、元组)则不发生改变

示例:

列表在函数中调用方法,列表本身发生改变

def add_elem(args,string):
    ‘‘‘将 lst_num 添加到 args 中‘‘‘

    args.append(string)
    # args += string
    # args.extend(string)
    # args.insert(len(args),string)

    return args

lst = [1,2,3,4]

string = "ABC"

print(add_elem(lst,string))
# [1, 2, 3, 4, ‘A‘, ‘B‘, ‘C‘]
print(lst)
# [1, 2, 3, 4, ‘ABC‘]

在函数中,如果列表作为实参,形参发生修改时,列表值发生改变

def add_elem(args,string):
    ‘‘‘将 lst_num 添加到 args 中‘‘‘

    args[len(args)-1] = string

    return args

lst = [1,2,3,4]

string = "ABC"

print(add_elem(lst,string))
# [1, 2, 3, ‘ABC‘]
print(lst)
# [1, 2, 3, ‘ABC‘]


2020-02-11

原文地址:https://www.cnblogs.com/hany-postq473111315/p/12294915.html

时间: 2024-10-08 01:03:03

Python按值传递参数和按引用传递参数的相关文章

Java中只有按值传递,没有按引用传递!(两种参数情况下都是值传递)

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟悉的值传递

关于python的函数的*和**参数:

1.将足够的参数解包以后传递给函数:>def f(p1, p2, p3, p4):>     print p1+p2+p3+p4>>li = [1, 2, 3, 4]>f(*li)10>>tu = (1, 2, 3, 4)>f(*tu)10>>di = {'p1':1, 'p2':2, 'p3':3, 'p4':4}>f(**di)>10 2.使用封包的方法访问多余的参数>>> def funct(*para, **

python执行shell获取硬件参数写入mysql

最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python执行shell获取这些信息,python执行shell脚本有以下三种方法: 1. os.system() os.system('ls')#返回结果0或者1,不能得到命令的输出 2. os.popen() output = os.popen('ls') print output.read()#打印出的

python函数 位置参数,关键字参数,可变参数优先级

def fun(arg,args=1,*arg,**keywords): python 一共有这四类参数,第一类最常见,不用多说,第二类,关键字参数,python能通过关键字找到参数,python函数的这种特性使得函数参数更加灵活,不一定要按顺序来传,第三类:一个星号是将非关键字参数收集起来,以tuple的形式保存,第四类则必须要提供”传递参数名=传递参数值”形式传递参数. 至于怎么传,相信大家都知道,这里不多说. 要说明的是在python2中这四类参数传递时是有优先顺序的,不管是定义函数,还是

python脚本程序,传入参数*要用单引号'*'

*号作为python脚本的传入参数时,必须用单引号'',才能正确传入.如python test.py 2014 '*' age python test.py 2014 * age是错误的. 比如 test.py脚本如下 import sys hdfs_report_historical_year = sys.argv[1] # eg:2014-05,2014-12,etc. hdfs_report_historical_month = sys.argv[2] # eg:all,region,ci

Python 必选参数,默认参数,可变参数,关键字参数和命名关键字参数

Py的参数还真是多,用起来还是很方便的,这么多参数种类可见它在工程上的实用性还是非常广泛的. 挺有意思的,本文主要参照Liaoxuefeng的Python教程. #必选参数 def quadratic(a, b, c): if not isinstance(a, (int, float)) or not isinstance(b, (int, float)) or not isinstance(c, (int, float)): raise TypeError('bad operand type

[Python] partial改变方法默认参数

Python 标准库中 functools库中有很多对方法很有有操作的封装,partial Objects就是其中之一,他是对方法参数默认值的修改. 下面就看下简单的应用测试. #!/usr/bin/env python # -*- coding: utf-8 -*- #python2.7x #partial.py #authror: orangleliu ''' functools 中Partial可以用来改变一个方法默认参数 1 改变原有默认值参数的默认值 2 给原来没有默认值的参数增加默认

Python进阶04 函数的参数对应

Python进阶04 函数的参数对应 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经接触过函数(function)的参数(arguments)传递.当时我们根据位置,传递对应的参数.我们将接触更多的参数传递方式. 回忆一下位置传递: def f(a,b,c): return a+b+c print(f(1,2,3)) 在调用f时,1,2,3根据位置分别传递给了a,b,c. 关键字传递 有些情况下,用位置传递会感觉比较

我爱Python之位置参数、关键字参数、默认参数

1.位置参数: >>> def check_web_server(host, port, path): print .... >>> check_web_server('www.python.org', 80, '/') 三个参数的顺序必须一一对应,且少一参数都不可以 2.(函数调用里的)关键字参数: 可以让函数更加清晰.容易使用,同时也清除了参数的顺序需求,关键字参数通过“键-值”形式加以指定,用于函数调用 >>> check_web_server(