精华内容
下载资源
问答
  • python函数传参问题.py

    2020-01-31 21:20:55
    个人写的python函数传参值改变的问题脚本,自己学习用的,大家可以拿来参考。 有问题欢迎大家指出。
  • C++调用Python传参

    2019-03-13 10:06:39
    C#调用C++,C++调用Python传参,包括C++向python传递图片数据,C++向python传递组数据,C++向python传递字符串数据,C++向python传递结构体数据,C++初始化python类数据并调用方法,实际案例,能直接运行,需要安装...
  • python函数传参

    2021-01-20 03:38:50
    形参:形式参数,只在函数的定义形式存在,为了表明运算流程,不在内存占用空间 实参:实际参数,实际声明的参数,会在内存开辟一块内存 位置参数 就是通过相对位置进行传参,调用的时候位置参数必须传,且...
  • 近日在使用golang的过程发现golang的函数传参python的稍有区别,现总结记录如下: golang函数传参 1. 当传数组时 会将整个数组全都复制后进行值传递(函数修改数组后并不会影响数组的值),当数组比较大时,每次...

    近日在使用golang的过程中发现golang的函数传参和python的稍有区别,现总结记录如下:

    golang函数传参

    1. 当传数组时

    会将整个数组全都复制后进行值传递(函数修改数组后并不会影响数组的值),当数组比较大时,每次传递数组都很占用资源,所以一般不用数组传参

    2. 当传切片时

    此时是引用传递(函数修改切片后,外面的切片也相应被改变),但由于函数只是进行引用传递,并不会复制一遍值,所以一般都使用切片传值

    python函数传参

    1. python函数传参时,传递的是这个对象,变量就是关于对象的引用;
    2. 所以当参数为可变对象时,此时是引用传递,函数改变参数值时外面的值也会相应改变;
    3. 当参数为不可变对象时,此时是值传递,函数改变参数值时外面的值不会相应改变;

    最后:
    以上均为个人学习中总结,转载请注明出处;如有什么不对欠缺的地方,欢迎各位评论交流,共同学习

    展开全文
  • 目前得验证在VS Code下,js传str到python会有编码问题,虽然没有完全解决。但和我最开始的目标没有关系了。不过也想知道是VS Code的什么bug?先搞完自己的小玩具先.... 脚本command没问题,就是这段代码不能在VS ...

    # -*- coding:UTF-8 -*-

    import execjs

    class jsReg():

    def __init__(self):

    self.ctx = execjs.compile("""

    function reg(text) {

    return text

    }

    """)

    def get_reg_text(self, text):

    print(text)

    a = '''adasd

    \nadad'''

    return self.ctx.call('reg', str(text))

    1.给js传a,一切正常

    2.给js传txt read出来,decode('utf-8')的数据text,就报错'ascii' codec can't decode byte 0xe2 in position 302: ordinal not in range(128)。

    目前我可以直接传b'...'字节数据给js,只是js那边需要转一下。

    我也想直接传字符数据'...'给js,但是报错编码问题。

    有一点不明的是,a 和 text的数据有什么区别?为什么a可以传给js,text解码读出来的数据传给js时,报编码错误?

    感谢剑心无痕的耐心解答。

    目前得验证在VS Code下,js传str到python会有编码问题,虽然没有完全解决。但和我最开始的目标没有关系了。不过也想知道是VS Code的什么bug?先搞完自己的小玩具先....

    脚本command没问题,就是这段代码不能在VS Code里调试了 - -

    感谢剑心无痕的耐心解答。!

    展开全文
  • 主要介绍了python 函数传参之传值还是传引用的分析,需要的朋友可以参考下
  • 本篇文章主要介绍了详解python函数传参是传值还是传引用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • python传参特性

    2018-12-07 13:41:30
    python传参特性: 1、传递参数一般有两种方式:引用和传递值。 引用:子函数直接修改所在地址的值 传递值:将子函数的返回值复制出来并返回 区别:使用过C++的朋友应该知道 int(a,b) 和 void(&amp...

    1、传递参数一般有两种方式:引用和传递值。
    严格的定义不上了,口语表达为:
    引用:子函数直接修改所在地址的值
    值传递:将子函数的返回值复制出来并返回
    举例:使用过C++的朋友应该知道Cpp中对引用传参和值传参的定义,如 int(a) 和 void(&a)的区别:
    值传参是将局部函数中的值复制成一个新的地址传递到主函数中,而引用传参是将主函数的参数地址直接给到子函数,子函数在该内存地址上对内存的值直接操作,举例如下:
    如下的C++语句:

    #include <iostream>
    using namespace std;
    int main()
    {
        int plus1(int);
        void plus2(int &);
       int b=1;
       cout<<" plus1" <<endl;
       plus1(b);
       //运行不改变b的值
       cout<<"plus1 run   b= "<<b<<endl;
       cout<<" plus2  "<<endl;
       plus2(b);
       //直接改变b的值
       cout<<"plus2 run   b= "<<b<<endl;
       plus2(b);
       //直接改变b的值
       cout<<"plus2 run   b= "<<b<<endl;
    }
    int plus1(int a){
    a+=1;
    return a;
    
    }
    
    void plus2(int&a){
    a=a+1;
    }
    
    

    在上面的代码块中,int plus1() 用的是值传递参数,void plus2() 用的是引用传递参数。运行的结果:

    plus1
    plus1 run   b= 1
     plus2
    plus2 run   b= 2
    plus2 run   b= 3
    Process returned 0 (0x0)   execution time : 0.062 s
    Press any key to continue.
    

    可以看到,在运行plus1之后,虽然有返回值,但是主函数中的b是不改变的,因此在plus1()运行后,b仍然是1,但是在plus2运行之后,b的值直接加上了1,plus2用的就是引用的传参特性。
    总结:引用传参直接改变参数的值,值传参不改变主函数中参数的值。

    当然,如果想让plus1()也有加1的功能也很简单。将主函数第5行改成:

    b=plus1(b);
    

    修改后:
    整体代码块为:

    #include <iostream>
    using namespace std;
    int main()
    {
        int plus1(int);
        void plus2(int &);
       int b=1;
       cout<<" plus1" <<endl;
       b=plus1(b);
       //运行不改变b的值
       cout<<"plus1 run   b= "<<b<<endl;
       cout<<" plus2  "<<endl;
       plus2(b);
       //直接改变b的值
       cout<<"plus2 run   b= "<<b<<endl;
       plus2(b);
       //直接改变b的值
       cout<<"plus2 run   b= "<<b<<endl;
    }
    int plus1(int a){
    a+=1;
    return a;
    
    }
    
    void plus2(int&a){
    a=a+1;
    }
    
    

    运行结果为:

     plus1
    plus1 run   b= 2
     plus2
    plus2 run   b= 3
    plus2 run   b= 4
    
    Process returned 0 (0x0)   execution time : 0.031 s
    Press any key to continue.
    

    以上是cpp中传参的用法,但是对于python这种解释性语言而言,没有像cpp这样严密的传参方式定义。它的传参方式又是怎么样的呢。

    2、python中的引用传参和值传参特性
    直接上结论:
    对于可变对象,python是用的引用传参,指字典、列表等可变对象
    对于不可变对象,python用的值传参,指数字,字符,元组

    上一个python中经典的误用:

    def fuc(a,b=[]):
        b.append(a)
    if __name__=="__main__":
        b=[]
        fuc(2,b)
        print (b)
        fuc(3,b)
        print(b)
    

    该段代码的目的是为了将a中的元素复制到list b 中,代码希望fuc(a,b) 时,输出的结果时b=[a]
    即我们希望运行的结果是:

    [2]
    [ 3]
    

    然而,实际运行时发现结果为:

    [2]
    [2, 3]
    

    在fuc(3,b)中竟然输出的b还保留了2的值。
    这里就是引用传参在作怪,由于python对于列表时引用传参。在调用fuc(2,b)时,b的值已经被改变成[2].因此在再次调用fuc(3,b)时,b的值时在[2]的基础上在末尾加上了3.即 b=[2 3]
    而要想避免以上情况,也很简单。将函数改为:

    def fuc(a,b=[]):
        b.clear()
        b.append(a)
        print(f'a={a}')
        print(f'b={b}')
        print(id(b),'in fuc ')
        
    if __name__=="__main__":
        b=[]
        print(id(b),'before fuction')
        fuc(2,b)
        print(f'b in main fuction 1:  {b}')
        print(id(b),'in main fuction 1')
        fuc(3,b) 
        print(f'b in main fuction 2:  {b}')
        print(id(b),'in main fuction 2')
    

    即在每次的调用中,都先将b clear 掉。
    查看,在子函数中地址和主函数的b的地址:

    1783220742600 before fuction
    a=2
    b=[2]
    1783220742600 in fuc 
    b in main fuction 1:  [2]
    1783220742600 in main fuction 1
    a=3
    b=[3]
    1783220742600 in fuc 
    b in main fuction 2:  [3]
    1783220742600 in main fuction 2
    

    发现b的内存地址在fuc 操作后仍然保持一致,即fuc中的操作是直接修改主函数中b的值

    而对于符号变量,python使用的是值传参

    def fuc2(a):
        print(id(a),'in fuc2')
        a=3
        print(id(a),'in fuc2  after')
        return a
        
    if __name__=="__main__":
        a=0
        print(id(a),'in main function')
        fuc2(a)
    

    运行结果:

    1359440928 in main function
    1359440928 in fuc2
    1359441024 in fuc2  after
    

    发现在 fuc2操作后,a的内存地址是在局部函数fuc2中新开辟的。

    a
    Out[28]: 0
    

    a没有改变。

    展开全文
  • python 程序传参

    2019-07-07 13:16:03
    通过给程序传入不同参数,使程序在能够不改动的情况下输出想要的效果,和函数传参不同,需要导入系统模块,sys #main.py import sys print(sys.argv) name = sys.argv[1] print("热烈欢迎 %s的到来"%name) ...

    通过给程序传入不同参数,使程序在能够不改动的情况下输出想要的效果,和函数传参不同,需要导入系统模块,sys

    #main.py
    
    import sys
    
    print(sys.argv)
    
    name = sys.argv[1]
    
    print("热烈欢迎 %s的到来"%name)

     

    • 运行 python 29传参数.py 老李    
    • 29传参数.py老李 都是参数,所以在 执行print(sys.argv) 的时候,列表里面有这两个参数
    • name = sys.argv[1] 将第一个参数 老李 赋值给name,最后输出 “热烈欢迎老李的到来”
    展开全文
  • python传参

    2020-12-02 14:55:11
    一、Python的函数传递二、python类方法外部传参 一、Python的函数传递 a = 1 def fun(a): print(“函数里”,id(a)) a = 2 print(“赋值后”,id(a), id(2)) print(“函数外”,id(a), id(1)) fun(a) print(a) 函数外 ...
  • python 函数传参问题

    2020-09-25 16:27:07
    python 函数传参是相当于c++里的传址或者传引用,所以对形参的操作也会改变实参的值。 比如下面代码: import torch def f(mu): eps = 0.01 mu += eps mu = torch.ones(2, 4) f(mu) print(mu) f(mu) print(mu)...
  • 首先说明一下在编写Python脚本时,如何在里面使用中文在脚本的开头可以加上如下代码段:# _*_ coding:utf-8 _*_ 其效果和#coding=utf-8 是一样的下面总结一下在学习Python定义函数时如何传参的问题:1、首先是位置...
  • python 命令行传参

    千次阅读 2017-01-09 15:34:50
    python程序如何通过命令行传参 写一个简单的例子 vi argv.py #/usr/bin/python import sys print sys.argv[0] print sys.argv[1] print sys.argv[2] print sys.argv[3]执行名为 argv 的程序,并通过命令行传入...
  • Python命令行传参

    2017-04-23 23:27:43
    实现方法使用sys库的argv类来实现。 argv[0]:代表执行的python程序名称,因此...示例demo.pyfrom sys import argvprint(argv[0])print(argv[1])print(argv[2])print(type(argv[1]))在CMD执行命令:python demo.py 1
  • python数据传参

    2020-02-17 22:17:07
    1、正常的传参: 2、默认形参: 3、位置传参与关键字传参: 4、可变参数 5、字典传参: 第一种方式:以键值对的方式 第二种方式:实参为字典 6、多种类型参数传参: 注意以下内截图: 如下...
  • def func (**.kwargs): print(kwargs) func(a=1,b=2,haha='哈哈',hehe='呵呵')
  • 我们通过一个简单的事例来展示一下函数的万能参数,我们先写一个最简单的函数def test(*args,**kwargs):print(args,kwargs)然后定义两个变量l = [1,2,3,4]d = {"a":1,"b":2}下面我们分别看下两种传参的方式有什么...
  • def a(a,b=2): print(a,b) print(a+b) a(2) 结果: 2 2 4
  • python脚本传参

    2018-07-19 14:11:26
    可以通过sys.argv和getopt组合来传参, 具体可参考以下: import os import sys import getopt def getArgs(): #get input parameter input_path = "." ...
  • import sys print(sys.argv[0]) # 0索引位置是调用的文件 print(sys.argv[1]) # 1索引的位置是传入的第一个

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,105
精华内容 16,842
关键字:

python中如何传参

python 订阅