當前位置:首頁 » 編程語言 » pythonlist傳參

pythonlist傳參

發布時間: 2023-03-14 11:37:23

python 的函數是怎麼傳遞參數的

Python 的函數傳遞參數:
Python 傳參數可以理解為 C 的 const 指針(your_type* const your_variable),它所指向的對象可以被修改產生副作用,但變數本身不能修改指向其他對象。這個和 C++ 的 reference 差不多。
所以如果一定要產生 C 的修改指針指向其他對象的效果,用 list、dict 或其他自定義的 mutable 對象包裝是一個辦法,但我認為這樣是一種不良實踐。在 C 語言中用參數輸出結果有非常多的理由:

C 語言沒有 tuple,不能返回多值,除非聲明一個 struct 類型。這種情況下劃分 in 參數和 out 參數成為一種慣例
C 語言沒有異常機制,返回值一般要保留給 errno
但這些情況在 Python 中都是不存在的

㈡ Python如何用列表向類傳參急!在線等!

無論是類的
構造函數
還是類的方法函數,都與普通函數一樣可以使用列表傳入多個
實參

class
MyClass:
....def
__init
__(self:a,b,c):
........pass
對於MyClass,我們一般使用下列方式
實例化

x=MyClass(1,2,3)
如果我們實例化使用的參數在列表l中,可以這樣做:
l=[1,2,3]
x=MyClass(*l)

㈢ 求助 python怎麼將可變參數傳到列表中

可以在perfom裡面把傳遞進來的參數member 循環到一個列表裡面,然後再傳遞給another_perform
def perform (self, *member):
parmas={}
for para in memeber:
params.add(para)
another_perform("commad", list= parmas )

㈣ Python3腳本傳參實戰(2個方法3個傳參列表的案例)

在一些測試平台對接時或者用例執行時,或多或少會用到Python腳本傳參的問題。

test.py腳本

#!/usr/bin/python3

import sys

print ('參數個數為:', len(sys.argv), '個參數。')

print ('參數列表:', str(sys.argv))

print ('腳本名:', str(sys.argv[0]))

print ('第一個參數:', sys.argv[1])

執行python3 test.py arg1 arg2 arg3

參數個數為: 4 個參數。

參數列表: ['test.py', 'arg1', 'arg2', 'arg3']

腳本名: test.py

第一個參數: arg1

test.py腳本

#!/usr/bin/python3

import argparse

# 生成了一個命令行參數的對象

parser = argparse.ArgumentParser(description='Test for argparse')

parser.add_argument('--name', '-n', help='name屬性,非必要參數')

parser.add_argument('--year', '-y', help='year 屬性,非必要參數,但有默認值', default=2017)

parser.add_argument('--body', '-b', help='body屬性,必要參數', required=True)

args = parser.parse_args()

print (args.year,  args.name, args.body)

查看幫助python3 test.py --help

usage: test.py [-h] [--name NAME] [--year YEAR] --body BODY

Test for argparse

optional arguments:

  -h, --help  show this help message and exit

  --name或-n NAME  name屬性,非必要參數

  --year或-y YEAR  year屬性,非必要參數,但有默認值

  --body或-b BODY  body 屬性,必要參數

執行python3 test.py --year 2021 -n robot  --body "are you ok?"

2021 robot are you ok?

以方法2中的test.py腳本為例

python3 test.py --year 2021 --body [\"test\", \"robot\",\"boy\" ]

2021 ["test", "robot", "boy" ]

以方法1中的test.py腳本為例

python3 test.py [\"test\", \"robot\",\"boy\" ]

參數個數為: 2個參數。

參數列表: ['test.py', '[\"test\", \"robot\", \"boy\" ]']

腳本名: test.py

第一個參數: ["test", "robot", "boy" ]

其實此時傳入的第一個參數是一個字元,需要轉換為列表。

import json

json.loads(sys.argv[1])

test_arg.py腳本

#!/usr/bin/python3

import argparse

import os

# 生成了一個命令行參數的對象

parser = argparse.ArgumentParser(description='Test for argparse')

parser.add_argument('--body', '-b', help='body屬性,必要參數', required=True)

args = parser.parse_args()

print (args.body)

command=python3 + '  ' + test_sys.py+ '  '  + args.body

print (command)

str=('command')

result=os.system(str)

test_sys.py腳本

#!/usr/bin/python3

import sys

import json

print ('第一個參數:', sys.argv[1])

print ('列表:', json.loads(sys.argv[1]))

執行python3 test_arg.py --body  [\"test\", \"robot\",\"boy\" ]

python3  test_sys.py  ["test", "robot", "boy" ]

test_sys.py執行報錯,轉json失敗。

還記得我們案例2中,腳本的傳入指定參數和實際傳入參數嘛?

test_arg.py腳本我們稍微優化下,在傳參前先字元替換下。

["test", "robot", "boy" ]轉換為[\"test\", \"robot\",\"boy\" ]即可。

command.replace(' " ' , r ' \" ') 添加到command=之後,再次運行看看呢?

㈤ python命令行傳入參數方式

如果在運行python腳本時需要傳入一些參數,可以使用如下兩種方式:

sys模塊是python常用的一個模塊,封裝了python解釋器相關的數據 . sys.argv 封裝了傳入的參數數據。

使用 sys.argv 接收上面第一個命令中包含的參數方式

parser.add_argument 方法的 type 參數理論上可以是任何合法的類型, 但有些參數傳入格式比較麻煩,例如list,所以一般使用 bool , int , str , float 這些基本類型就行了,更復雜的需求可以通過 str 傳入,然後手動解析。 bool 類型的解析比較特殊,傳入任何值都會被解析成 True ,傳入空值時才為`False

具體請參考API文檔: https://docs.python.org/2/library/argparse.html

㈥ Python如何用列表向類傳參急!在線等!

無論是類的構造函數還是類的方法函數,都與普通函數一樣可以使用列表傳入多個實參。
class MyClass:
....def __init__(self:a,b,c):
........pass
對於MyClass,我們一般使用下列方式實例化:
x=MyClass(1,2,3)
如果我們實例化使用的參數在列表l中,可以這樣做:
l=[1,2,3]
x=MyClass(*l)

㈦ Python 的函數是怎麼傳遞參數的

對象vs變數
在python中,類型屬於對象,變數是沒有類型的,這正是python的語言特性,也是吸引著很多pythoner的一點。所有的變數都可以理解是內存中一個對象的「引用」,或者,也可以看似c中void*的感覺。所以,希望大家在看到一個python變數的時候,把變數和真正的內存對象分開。
類型是屬於對象的,而不是變數。
這樣,很多問題就容易思考了。
例如:

對象vs變數
12
nfoo = 1 #一個指向int數據類型的nfoo(再次提醒,nfoo沒有類型)lstFoo = [1] #一個指向list類型的lstFoo,這個list中包含一個整數1

可更改(mutable)與不可更改(immutable)對象
對應於上一個概念,就必須引出另了另一概念,這就是可更改(mutable)對象與不可更改(immutable)對象。
對於python比較熟悉的人們都應該了解這個事實,在python中,strings, tuples, 和numbers是不可更改的對象,而list,dict等則是可以修改的對象。那麼,這些所謂的可改變和不可改變影響著什麼呢?
可更改vs不可更改
12345
nfoo = 1nfoo = 2lstFoo = [1]lstFoo[0] = 2

代碼第2行中,內存中原始的1對象因為不能改變,於是被「拋棄」,另nfoo指向一個新的int對象,其值為2
代碼第5行中,更改list中第一個元素的值,因為list是可改變的,所以,第一個元素變更為2。其實應該說,lstFoo指向一個包含一個對象的數組。賦值所發生的事情,是有一個新int對象被指定給lstFoo所指向的數組對象的第一個元素,但是對於lstFoo本身來說,所指向的數組對象並沒有變化,只是數組對象的內容發生變化了。這個看似void*的變數所指向的對象仍舊是剛剛的那個有一個int對象的list。
如下圖所示:

Python的函數參數傳遞:傳值?引用?
對於變數(與對象相對的概念),其實,python函數參數傳遞可以理解為就是變數傳值操作,用C++的方式理解,就是對void*賦值。如果這個變數的值不變,我們看似就是引用,如果這個變數的值改變,我們看著像是在賦值。有點暈是吧,我們仍舊據個例子。
不可變對象參數調用
12345
def ChangeInt( a ): a = 10nfoo = 2 ChangeInt(nfoo)print nfoo #結果是2

這時發生了什麼,有一個int對象2,和指向它的變數nfoo,當傳遞給ChangeInt的時候,按照傳值的方式,復制了變數nfoo的值,這樣,a就是nfoo指向同一個Int對象了,函數中a=10的時候,發生什麼?(還記得我上面講到的那些概念么),int是不能更改的對象,於是,做了一個新的int對象,另a指向它(但是此時,被變數nfoo指向的對象,沒有發生變化),於是在外面的感覺就是函數沒有改變nfoo的值,看起來像C++中的傳值方式。
可變對象參數調用
12345
def ChangeList( a ): a[0] = 10lstFoo = [2]ChangeList(lstFoo )print nfoo #結果是[10]

當傳遞給ChangeList的時候,變數仍舊按照「傳值」的方式,復制了變數lstFoo 的值,於是a和lstFoo 指向同一個對象,但是,list是可以改變的對象,對a[0]的操作,就是對lstFoo指向的對象的內容的操作,於是,這時的a[0] = 10,就是更改了lstFoo 指向的對象的第一個元素,所以,再次輸出lstFoo 時,顯示[10],內容被改變了,看起來,像C++中的按引用傳遞。

㈧ python函數傳參是傳值還是傳引用

那要看數據類型了,int,float,str這種就是傳值,list,dict,類的實例,自定義對象都是穿引用。

下面是示例代碼:

defchange(int1,float1,str1,dict1,obj1,list1):
int1+=1
float1+=1
str1+='changed'
dict1['none_exist_key']='none_exist_value'
obj1=None
list1.append('change')
classobj:
pass
int1=0
float1=0.0
str1='origin'
dict1={'key':'value'}
obj1=obj()
list1=['only_element']
print(int1)
print(float1)
print(str1)
print(dict1)
print(obj1)
print(list1)
change(int1,float1,str1,dict1,obj1,list1)
print('afterchange')
print(int1)
print(float1)
print(str1)
print(dict1)
print(obj1)
print(list1)
熱點內容
動態規劃01背包演算法 發布:2024-11-05 22:17:40 瀏覽:849
nasm編譯器如何安裝 發布:2024-11-05 22:01:13 瀏覽:180
登錄密碼在微信的哪裡 發布:2024-11-05 22:00:29 瀏覽:739
c防止反編譯工具 發布:2024-11-05 21:56:14 瀏覽:247
安卓虛擬機怎麼用 發布:2024-11-05 21:52:48 瀏覽:344
php時間搜索 發布:2024-11-05 20:58:36 瀏覽:478
燕山大學編譯原理期末考試題 發布:2024-11-05 20:13:54 瀏覽:528
華為電腦出現臨時伺服器 發布:2024-11-05 20:05:08 瀏覽:408
斗戰神免費挖礦腳本 發布:2024-11-05 19:53:25 瀏覽:665
網吧伺服器分別是什麼 發布:2024-11-05 19:45:32 瀏覽:392