python函數星號參數

2人閱讀 評論(0) 收藏 編輯 刪除

今天有個工作是導出一個函數給腳本用
我自已先要測一下
先要客戶端發送一個消息給服務器
看了下C++部分的代碼,如下

?? "def onNetMessage(self,playerID, msgName,msgParam):\n" //客戶端調用服務器腳本
?? "??? fun = globals()[msgName]\n"
?? "??? args = eval(msgParam)\n"
?? "??? fun(self, playerID, *args)\n"

起初憑自已的理解,寫出的代碼總是出錯,
在網上搜了一下,又作了個實驗,得以解決,
原來是參數 msgParam必須得是"[1,2]"類似的形式

三行的含義:
1.先從通過msgName字符找到函數 "fun1" => fun1
2.eval把字符串msgParam變成參數,"[1,2]" => [1,2]
3.等價為fun1(self,playerID,1,2)

引用一篇文章

神奇的星號

傳遞實參和定義形參(所謂實參就是調用函數時傳入的參數,形參則是定義函數是定義的參數)的時候,你還可以使用兩個特殊的語法:``*`` ** 。

調用函數時使用 * **

test(*args)* 的作用其實就是把序列 args 中的每個元素,當作位置參數傳進去。比如上面這個代碼,如果 args 等于 (1,2,3) ,那么這個代碼就等價于 test(1, 2, 3) 。

test(**kwargs)** 的作用則是把字典 kwargs 變成關鍵字參數傳遞。比如上面這個代碼,如果 kwargs 等于 {'a':1,'b':2,'c':3} ,那這個代碼就等價于 test(a=1,b=2,c=3) 。

定義函數參數時使用 * **

def test(*args):
??? ...定義函數參數時 * 的含義又要有所不同,在這里 *args 表示把傳進來的位置參數都裝在元組 args 里面。比如說上面這個函數,調用 test(1, 2, 3) 的話, args 的值就是 (1, 2, 3) 。:

def test(**kwargs):
??? ...類似的, ** 就是針對關鍵字參數和字典的了。 調用 test(a=1,b=2,c=3) 的話, kwargs 的值就是 {'a':1,'b':2,'c':3} 了。

普通的參數定義和傳遞方式和 * 們都可以和平共處,不過顯然 * 必須放在所有位置參數的最后,而 ** 則必須放在所有關鍵字參數的最后,否則就要產生歧義了。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445197.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445197.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445197.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MachineLearning(3)-流型

流型-manifold在很多機器學習的文章中會見到“嵌入在高維空間的低維流型”這樣的字眼,下記錄一些重要概念。參考資料:https://blog.csdn.net/sinat_32043495/article/details/789977581.流型 局部具有歐幾里得空間性質的空間(流型就是一個空間…

C/C++常見面試題(四)

C/C面試題集合四 目錄 1、什么是C中的類?如何定義和實例化一個類? 2、請解釋C中的繼承和多態性。 3、什么是虛函數?為什么在基類中使用虛函數? 4、解釋封裝、繼承和多態的概念,并提供相應的代碼示例 5、如何處理內…

機器學習問題總結(03)

文章目錄1.struct和class區別,你更傾向用哪個2.kNN,樸素貝葉斯,SVM的優缺點,各種算法優缺點2.1 KNN算法2.2 樸素貝葉斯2.3SVM算法2.4 ANN算法2.5 DT算法3. 10億個整數,1G內存,O(n)算法,統計只出…

python源代碼現成重用大全

Nullege is a search engine for Python source code. http://nullege.com/

redis——新版復制

sync雖然解決了數據同步問題,但是在數據量比較大情況下,從庫斷線從來依然采用全量復制機制,無論是從數據恢復、寬帶占用來說,sync所帶來的問題還是很多的。于是redis從2.8開始,引入新的命令psync。 psync有兩種模式&a…

Python(23)-面向對象2-繼承,多態

面向對象基本概念2--繼承、多態1.繼承基本概念2.子類重寫父類方法2.1完全重寫2.2擴展父類方法--super()3.多繼承4.新式類和舊式類5.多態基本概念6.類屬性、類方法-classmethod6.1類屬性6.2類方法classmethod7.靜態方法staticmethod8.案例分析本系列博文來自學習《Python基礎視頻…

Linux Linux 集群

Linux 集群 Page navigation 什么是集群?集群分類基于 Linux 的集群Linux 服務器集群系統Linux 高性能計算集群集群系統 MOSIX構建 Linux 集群IBM 與 Linux 集群 本專題收集了 Linux 集群相關的文章和教程。 什么是集群? 簡單的說,集群(cluster&#x…

機器學習問題總結(04)

文章目錄1、MLP的BP過程2、maxpool層BP怎么做的2.1 **mean pooling**2.2 max pooling3、opencv遍歷像素的方式,講兩種?4、傳統圖像處理有了解過嗎,比如去噪 特征提取5、問在linux下寫過代碼嗎? 問用了什么軟件工具6、LDA&#xff…

持續更新的Zookeeper知識總結

簡介 Zookeeper為分布式應用 提供了高效且可靠的分布式協調服務,提供了諸如統一命名服務、發布訂閱、負載均衡、配置管理和分布式鎖等分布式的基礎服務。 設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來,構成一個高效可靠的原語集&#xf…

Python(24)-面向對象3-可迭代類對象Pokemon

面向對象3-Pokemon demo1.可迭代類對象1.可迭代類對象 想要實現類對象中某些屬性/數值的迭代訪問,需要在類中定義一個__iter__()方法,和__next__() 的方法(python 2 中為next()方法)。 _iter_()返回值是self, _next_()中遍歷完所有的元素后發…

機器學習問題總結(05)

文章目錄1. Hadoop、Spark1.1 hadoop1.2 spark1.3 MapReduce1.3.1 概念1.3.1 MapReduce執行流程2、機器學習場景3、推薦系統(預測電影等級)4、CTR(點擊通過率 -> 廣告)5、SVM5.1 svm的原理5.2 SVM的核技巧6、K-means6.1 K-mean…

基于Socket的UDP和TCP編程介紹

一、概述 TCP(傳輸控制協議)和UDP(用戶數據報協議是網絡體系結構TCP/IP模型中傳輸層一層中的兩個不同的通信協議。 TCP:傳輸控制協議,一種面向連接的協議,給用戶進程提供可靠的全雙工的字節流,TCP套接口是字節流套接口(streamsocket)的一種。 UDP:用戶數據報協議。U…

Python(25)-單例設計模式

單例設計模式1.單例設計模式2.__new__方法3.初始動作只執行一次本系列博文來自學習《Python基礎視頻教程》筆記整理,視屏教程連接地址:http://yun.itheima.com/course/273.html1.單例設計模式 設計模式:不同的問題使用不同的解決套路。學習設…

Linux Socket通信 C/S模型

代碼片段(8) [代碼] MySocket.h 01#ifndef _MYSOCKET_0623_H 02#define _MYSOCKET_0623_H 03 04#include <sys/socket.h> 05#include <sys/types.h> 06#include <arpa/inet.h> 07#include <netinet/in.h> 08#include <sys/wait.h> 09#include &…

Java多線程——基本概念

線程和多線程 程序&#xff1a;是一段靜態的代碼&#xff0c;是應用軟件執行的藍本 進程&#xff1a;是程序的一次動態執行過程&#xff0c;它對應了從代碼加載、執行至執行完畢的一個完整過程&#xff0c;這個過程也是進程本身從產生、發展至消亡的過程 線程&#xff1a;是比…

textCNN初探

文章目錄目錄1.什么是textCNN1.1 textCNN 提出的背景1.2 textCNN 合理性分析2.textCNN相比于傳統圖像領域的CNN有什么特點&#xff1f;3.textCNN例子講解3.1 參數和超參數3.2 textCNN的數據3.3 textCNN的網絡結構定義3.4 代碼目錄 1.什么是textCNN 1.1 textCNN 提出的背景 我…

Python(28)-異常

異常1.拋出異常2.捕獲異常3.依據錯誤類型捕獲異常4.捕獲未知錯誤5.異常捕獲的完整語法6.異常傳遞7.主動拋出異常本系列博文來自學習《Python基礎視頻教程》筆記整理&#xff0c;視屏教程連接地址&#xff1a;http://yun.itheima.com/course/273.html1.拋出異常 拋出異常&#…

詞嵌入初探

文章目錄目錄1.詞嵌入產生的背景1.1 NLP關鍵&#xff1a;語言的表示1.2 NLP詞的表示方法類型1.2.1 獨熱表示one-hot1.2.2 詞的分布式表示distributed representation1.3 NLP中的語言模型1.4 詞的分布表示1.4.1 基于矩陣的分布表示1.4.2 基于聚類的分布表示1.4.3 基于神經網絡的…

Pytorch(5)-梯度反向傳播

自動求梯度1. 函數對自變量x求梯度--ax^2b2. 網絡對參數w求梯度- loss(w,x)3. 自動求梯度的底層支持--torch.autograd3.1 Variable3.1.1 Variable構造函數3.1.2 Variable鏈式求導--backward()3.1.3 Variable反向傳播函數--grad_fn3.2 計算圖3.2.1 動態創建計算圖3.2.2 非葉子節…

VIM使用系列之一——配置VIM下編程和代碼閱讀環境

作者&#xff1a;gnuhpc from http://blog.csdn.net/gnuhpc http://gnuhpc.wordpress.com/ 本文環境&#xff1a;ubuntu 10.10/vim7.2 前言&#xff1a;一年前寫過一篇關于VIM的C/C編程環境的文字&#xff0c;一年中又接觸了很多東西&#xff0c;深入使用中發現其實還是需要有…