當前位置:首頁 » 編程語言 » python參數解析

python參數解析

發布時間: 2022-10-20 20:44:52

⑴ 如何進行處理python對象參數解析

椋�匭虢�潯嘁氤啥��唇涌獾男問劍�ǔJ褂肞ython的c語言擴展介面提供的函數PyArg_ParseTuple()來獲得這些參數值,希望本文能夠對大家有幫助。Python是用C語言實現的一種腳本語言,本身具有優良的開放性和可擴展性,並提供了方便靈活的應用程序介面(API)。從而使得C/C++程序員能夠在各個級別上對Python解釋器的功能進行擴展。在使用C/C++對Python進行功能擴展之前,必須首先掌握Python解釋所提供的C語言介面。Python是一門面向對象的腳本語言,所有的對象在Python解釋器中都被表示成PyObject,PyObject結構包含Python對象的所有成員指針。並且對Python對象的類型信息和引用計數進行維護。在進行Python的擴展編程時,一旦要在C或者C++中對Python對象進行處理,就意味著要維護一個PyObject結構。在Python的C語言擴展介面中,大部分函數都有一個或者多個參數為PyObject指針類型,並且返回值也大都為PyObject指針。為了簡化內存管理,Python通過引用計數機制實現了自動的垃圾回收功能,Python中的每個對象都有一個引用計數。用來計數該對象在不同場所分別被引用了多少次。每當引用一次Python對象,相應的引用計數就增1,每當消毀一次Python對象,則相應的引用就減1,只有當引用計數為零時,才真正從內存中刪除Python對象。下面的例子說明了Python解釋器如何利用引用計數來對Pyhon對象進行管理:#include <Python.h> PyObject* wrap_fact(PyObject* self, PyObject* args) { int n, result; if (! PyArg_ParseTuple(args, "i:fact", &n)) return NULL; result = fact(n); return Py_BuildValue("i", result); } static PyMethodDef exampleMethods[] = { {"fact", wrap_fact, METH_VARARGS, "Caculate N!"}, {NULL, NULL} }; void initexample() { PyObject* m; m = Py_InitMole("example", exampleMethods); } 在C/C++中處理Python對象時,對引用計數進行正確的維護是一個關鍵問題,處理不好將很容易產生內存泄漏。Python的C語言介面提供了一些宏來對引用計數進行維護,最常見的是用Py_INCREF()來增加使Python對象的引用計數增1,用Py_DECREF()來使Python對象的引用計數減1。該函數是Python解釋器和C函數進行交互的介面,帶有兩個參數:self和args。參數self只在C函數被實現為內聯方法(built-in method)時才被用到。通常該參數的值為空(NULL),參數args中包含了Python解釋器要傳遞給C函數的所有參數,通常使用Python的C語言擴展介面提供的函數PyArg_ParseTuple()來獲得這些參數值。方法列表中的每項由四個部分組成:方法名、導出函數、參數傳遞方式和方法描述。

⑵ Python中定義函數默認參數值的使用注意事項

4.7.1. 默認參數值
最常用的一種形式是為一個或多個參數指定默認值。這會創建一個可以使用比定義是允許的參數更少的參數調用的函數,例如:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise OSError('uncooperative user')
print(complaint)
這個函數可以通過幾種不同的方式調用:
只給出必要的參數:
ask_ok('Do you really want to quit?')
給出一個可選的參數:
ask_ok('OK to overwrite the file?', 2)
或者給出所有的參數:
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
這個例子還介紹了 in 關鍵字。它測定序列中是否包含某個確定的值。
默認值在函數 定義 作用域被解析,如下所示:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
將會輸出 5。
重要警告: 默認值只被賦值一次。這使得當默認值是可變對象時會有所不同,比如列表、字典或者大多數類的實例。例如,下面的函數在後續調用過程中會累積(前面)傳給它的參數:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
這將輸出:
[1]
[1, 2]
[1, 2, 3]
如果你不想讓默認值在後續調用中累積,你可以像下面一樣定義函數:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L

⑶ 用python怎麼解析'%3cp%3e%e5%'

import urllib
rawurl=xxx
url=urllib.unquote(rawurl)

所用模塊:urllib
所用函數:urllib.unquote()
案例
import urllib
rawurl = "%E6%B2%B3%E6%BA%90"url = urllib.unquote(rawurl)print url

輸出
河源

問題擴展
urllib.unquote()目的是對url編碼進行解碼,與該函數對應的是編碼函數urllib.quote()

123

>>> import urllib>>> urllib.quote("河源")'%E6%B2%B3%E6%BA%90

URL為何要編碼、解碼?
通常如果一樣東西需要編碼,說明這樣東西並不適合傳輸。原因多種多樣,如Size過大,包含隱私數據。對於Url來說,之所以要進行編碼,是因為Url中有些字元會引起歧義。
例如,Url參數字元串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/s?q=abc&ie=utf-8。如果你的value字元串中包含了=或者&,那麼勢必會造成接收Url的伺服器解析錯誤,因此必須將引起歧義的&和=符號進行轉義,也就是對其進行編碼。
又如,Url的編碼格式採用的是ASCII碼,而不是Unicode,這也就是說你不能在Url中包含任何非ASCII字元,例如中文。否則如果客戶端瀏覽器和服務端瀏覽器支持的字元集不同的情況下,中文可能會造成問題。

⑷ python所有內置函數的定義詳解

1、定義函數

函數是可重用的程序。本書中已經使用了許多內建函數,如len()函數和range()函數,但是還沒自定義過函數。定義函數的語法格式如下:

def 函數名(參數):

函數體

定義函數的規則如下:

①關鍵字def用來定義一個函數,它是define的縮寫。

②函數名是函數的唯一標識,函數名的命名規則遵循標識符的命名規則。

③函數名後面一定要緊跟著一個括弧,括弧內的參數是可選的,括弧後面要有冒號。

④函數體(statement)為一個或一組Python語句,注意要有縮進。

⑤函數體的第一行可以有文檔字元串,用於描述函數的功能,用三引號括起來。

按照定義規則,可以定義第一個函數了:

  • >>>defhello_world():

  • ...print('Hello,world!')#注意函數體要有縮進

  • ...

  • >>>hello_world()

  • Hello,world!

  • 這個函數不帶任何參數,它的功能是列印出「Hello,world!」。最後一行代碼hello_world()是調用函數,即讓Python執行函數的代碼。

    2、全局變數和局部變數

    全局變數是定義在所有函數外的變數。例如,定義一個全局變數a,分別在函數test1()和test2()使用變數a:

  • >>>a=100#全局變數

  • >>>deftest1():

  • ...print(a)

  • ...

  • >>>deftest2():

  • ...print(a)

  • ...

  • >>>test1()

  • 100

  • >>>test2()

  • 100

  • 定義了全局變數a之後,在函數test1()和test2()內都可以使用變數a,由此可知,全局變數的作用范圍是全局。

    局部變數是在函數內定義的變數,除了用關鍵字global修飾的變數以外。例如,在函數test1()內定義一個局部變數a,分別在函數外和另一個函數test2()內使用變數a:

  • >>>deftest1():

  • ...a=100#局部變數

  • ...print(a)

  • ...

  • >>>deftest2():

  • ...print(a)

  • ...

  • >>>test1()

  • 100

  • >>>print(a)

  • Traceback(mostrecentcalllast):

  • File"<stdin>",line1,in<mole>

  • NameError:name'a'isnotdefined

  • >>>test2()

  • Traceback(mostrecentcalllast):

  • File"<stdin>",line1,in<mole>

  • File"<stdin>",line2,intest2

  • NameError:name'a'isnotdefined

  • Python解釋器提示出錯了。由於局部變數a定義在函數test1()內,因此,在函數test1()內可以使用變數a,但是在函數外或者另一個函數test2()內使用變數a,都會報錯,由此可見,局部變數的作用范圍是定義它的函數內部。

    一般情況下,在函數內聲明的變數都是局部變數,但是採用關鍵字global修飾的變數卻是全局變數:

  • >>>deftest1():

  • ...globala#全局變數

  • ...a=100

  • ...print(a)

  • ...

  • >>>deftest2():

  • ...print(a)

  • ...

  • >>>test1()

  • 100

  • >>>print(a)

  • 100

  • >>>test2()

  • 100

  • 這個程序與上個程序相比,只是在函數test1()中多了一行代碼「global a」,程序便可以正確運行了。在函數test1()中,採用關鍵字global修飾了變數a之後,變數a就變成了全局變數,不僅可以在該函數內使用,還可以在函數外或者其他函數內使用。

    如果在某個函數內局部變數與全局變數同名,那麼在該函數中局部變數會覆蓋全局變數:

  • >>>a=100#全局變數

  • >>>deftest1():

  • ...a=200#同名局部變數

  • ...print(a)

  • ...

  • >>>deftest2():

  • ...print(a)

  • ...

  • >>>test1()

  • 200

  • >>>test2()

  • 100

  • 由於在函數test1()中定義了一個與全局變數同名的局部變數a,因此,在函數test1()中全局變數a的值被局部變數覆蓋了,但是在函數test2()中全局變數a的值沒有被覆蓋。

    綜上所述,在Python中,全局變數保存的數據供整個腳本文件使用;而局部變數只用於臨時保存數據,變數僅供局部代碼塊使用。

⑸ python2.7 怎麼解析命令行輸入的中文參數

本文實例講述了python讀取命令行參數的方法。分享給大家供大家參考。具體分析如下:
如果想對python腳本傳參數,python中對應的argc, argv(c語言的命令行參數)是什麼呢?
需要模塊:sys
參數個數:len(sys.argv)
腳本名: sys.argv[0]
參數1: sys.argv[1]
參數2: sys.argv[2]
test.py:
import sys
print "腳本名:", sys.argv[0]
for i in range(1, len(sys.argv)):
print "參數", i, sys.argv[i]
>>>python test.py hello world

腳本名:test.py
參數 1 hello
參數 2 world
python中使用命令行選項:
例如我們需要一個convert.py腳本。它的作用是處理一個文件,並將處理後的結果輸出到另一個文件中。
要求該腳本滿足以下條件:
1.通過-i -o選項來區別參數是輸入文件還是輸出文件.
>>> python convert.py -i inputfile -o outputfile
2.當不知道convert.py需要哪些參數時,用-h列印出幫助信息
>>> python convert.py -h
getopt函數原形:
getopt.getopt(args, options[, long_options])
convert.py:
import sys, getopt
opts, args = getopt.getopt(sys.argv[1:], "hi:o:")
input_file=""
output_file=""
for op, value in opts:
if op == "-i":
input_file = value
elif op == "-o":
output_file = value
elif op == "-h":
usage()
sys.exit()

代碼解釋:
a) sys.argv[1:]為要處理的參數列表,sys.argv[0]為腳本名,所以用sys.argv[1:]過濾掉腳本名。
b) "hi:o:": 當一個選項只是表示開關狀態時,即後面不帶附加參數時,在分析串中寫入選項字元。當選項後面是帶一個附加參數時,在分析串中寫入選項字元同時後面加一個":"號。所以"hi:o:"就表示"h"是一個開關選項;"i:"和"o:"則表示後面應該帶一個參數。
c) 調用getopt函數。函數返回兩個列表:opts和args。opts為分析出的格式信息。args為不屬於格式信息的剩餘的命令行參數。opts是一個兩元組的列表。每個元素為:(選項串,附加參數)。如果沒有附加參數則為空串''。
getopt函數的第三個參數[, long_options]為可選的長選項參數,上面例子中的都為短選項(如-i -o)
長選項格式舉例:
--version
--file=error.txt
讓一個腳本同時支持短選項和長選項
getopt.getopt(sys.argv[1:], "hi:o:", ["version", "file="])
希望本文所述對大家的Python程序設計有所幫助。

⑹ python cmd 傳入參數

python包含一個"argparse"的模塊,提供了異常強大的參數解析功能。下面是一個簡單的例子#!/usr/bin/envpython#coding:utf-8#importsysimportargparseif__name__=="__main__":parser=argparse.ArgumentParser(description='')parser.add_argument('integers',metavar='int',nargs='+',type=int,help='anintegertobesummed')parser.add_argument('--log',default=sys.stdout,type=argparse.FileType('w'),help='')args=parser.parse_args()args.log.write('%s\n'%sum(args.integers))args.log.close()$./test2.py123456728$./test2.py633132765$

⑺ 如何用python解析soap消息體中的參數

參數面板是什麼意思?程序的第4列是什麼意思? 我猜想你這個pyc程序應該是一個GUI程序,有圖形界面的。

只能告訴你原理,你自己去試驗。
第一步是讀取EXCEL的內容。這個可以使用一個庫xlrd。具體可以搜索python excel就可以找到幫助文檔

第二步是將內容寫到pyc程序的第四列。先用probe(這是visual studio帶的一個工具),也可以用其它的工具,找到窗口的title, class,以及控制項窗口的class,然後用pywin32里的功能,通過文件消息找到對應的窗口句柄,再找到控制項的句柄,然後sendmessage,消息似乎是set caption,或者是其它的。你自己找一找。

另外python也有這方面的庫,似乎pyhook可以實現滑鼠的控制,另外還有autox, pywinauto都有這樣的功能。可以直接向某個控制項發送文本。

這樣就完成你的要求了。

⑻ 哪個命令可以查看python的各參數信息

python獲取命令行參數的方法:getopt模和argparse模塊。
getopt模塊主要用到了模塊中的函數:options, args = getopt.getopt(args, shortopts, longopts=[])
argparse模塊用於解析命令行選項和參數的標准模塊。
使用步驟:
1、import argparse#導入模塊
2、parser = argparse.ArgumentParser()#創建解析對象
3、 parser.add_argument()#向該對象中添加使用到的命令行選項和參數
4、 parser.parser_args()#解析命令行

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:517
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:20
linux485 發布:2025-07-05 14:38:28 瀏覽:299
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:751
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:427
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:689
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:235
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:681
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:279
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:828