python不支援過載函式
注意,python是動態程式語言,因此沒有過載這個概念。這是因為形參沒有型別定義,
同名函式一旦定義,後者會覆蓋前著,也就是說:最後一次定義有效
1 import os
2
3
4 def tt(sa,sb):
5 return sa+sb
6
7 def tt(sa,sb,sc):
8 return sa-sb+sc
9
10
11 if __name__=="__main__":
12 print "this is a test on 10.58.254.50 for ssh!"
13 num="465464"
14 num2= "num254461"
15 fo = open('/home/mingjian/work/resulttmp.txt','w')
16 try:
17 fo.write(num)
18 finally:
19 fo.close()
20 print tt(1,2,3)
21 print tt(3,4)
最後一行報錯,引數不符合。
- Python是動態型別語言,不能簡單地說它支援或者不支援過載,我的思考結果是,過載仍然存在,只是以不同的方式呈現。原來我們理解的過載,都是在靜態型別語言中,關心引數個數以及引數型別;在動態型別語言裡的過載根本不需要關心引數型別,只需要關心引數個數。而在Python裡,關心引數個數的過載是由預設引數和傳遞引數名稱來實現的。這樣,程式設計師就沒有必要自己來寫兩個名稱一樣而引數不同的函數了!事實上,在同一個模組或者同一個類中,寫兩個名稱相同的方法的時候(引數個數是否相同不重要),後面的那個方法會簡單覆蓋前面的方面;其次,在子類繼承父類時,同名(不同參)的方法也會簡單覆蓋(子類覆蓋父類)。但是,這不說明Python沒有過載,它只是不需要程式設計師自己來實現過載(如果說程式設計師還需要做什麼的話,那就僅僅是要定義預設引數和引數名稱)。如果你需要過載的話,”預設引數+引數名傳遞“就能達到你想要的過載了!
- 有貼子會說,預設引數和過載是兩回事,但是我覺得,C++裡不允許同時定義預設引數和過載函式是有道理的,Java裡乾脆取消預設引數,只有過載方法也是有道理的,這個道理,就是”預設引數和基於引數個數的過載是一回事“。只是預設引數太不好控制了,特別是遇到中間一個引數是預設引數的情況,Python提供的解決辦法是:引數名傳遞!好牛叉的思想,呵呵,從這些小細節開始喜歡Python。別具一格,又把問題解決的如此完美,這就是處處為程式設計師著想的Python!
相關推薦
python不支援過載函式
注意,python是動態程式語言,因此沒有過載這個概念。這是因為形參沒有型別定義, 同名函式一旦定義,後者會覆蓋前著,也就是說:最後一次定義有效 1 import os 2 3 4
python子程序不支援input函式
問題 寫多程序程式的時候,在子程序呼叫的函式內部呼叫了input函式,提示EOFError: EOF when reading a line,具體如下錯誤: 抽象出來的程式碼如下: #encoding=utf-8 from multiprocessing import Pool,P
python中子程序不支援input()函式輸入
錯誤的原始碼:import socket import threading import multiprocessing # 建立socket serve_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s
PHP不支援過載的解決方法
PHP不支援函式的過載,以後也不會支援在OOP中,函式的過載有兩個條件1、引數的個數不同——PHP支援引數預設,無法用引數個數區別2、引數的型別不同——PHP是弱型別語言,會根據上下文自動做型別轉換所以,PHP不可能支援函式的過載
js 寫一個函式相容 不支援sort函式的的瀏覽器
var mySort = function(fn){if(typeof fn != 'function'){fn = function(a,b){return a-b;}}for(var i=1;i<this.length;i++){//var t = this[i-1];var t = this[i]
Python不使用int()函式把字串轉換為數字
不使用int()函式的情況下把字串轉換為數字,如把字串"12345"轉換為數字12345。 方法一:利用str函式 既然不能用int函式,那我們就反其道而行,用str函式找出每一位字元表示的數字大寫。 def atoi(s): s = s[::-1] num
為什麼c++支援過載而C語言不支援過載
學過C語言和C++的人都知道, C++支援函式過載而C語言不支援函式過載。 而所謂的函式過載就是指: 在同一作用域類,一組函式的函式名相同,引數列表不同(個數不同或型別不同),返回值可同可不同。 那麼問題來了,為什麼C++支援函式過載,而C語言不支援呢? 從程式碼的編譯到執
hadoop案例測試——pi值、wordcount函式,hadoop不支援本地庫問題
前言:本文案例測試所需環境都是在前面幾篇blog的基礎上進行的,具體內容請檢視: http://blog.csdn.net/u012829611/article/details/77678609 http://blog.csdn.net/u012829611/article/deta
解析python字串型別為什麼不支援改變
在C++中,如果不適用STL庫的String類,字串可以用char陣列表示: 例如:char str[5]=“absde”;//報錯,溢位,因為c++字串末尾有一個\0 應該寫成這樣char str[5]=“abcd”;//OK str[0]=‘f’;//ok 好,現在換python str
linux伺服器中不支援soap及bcmul函式的結局方法
新的程式裡用了webserice介面,部到伺服器,先是提示:bcmul() 函式不可用,網上搜索一番,得知這是php的高精度函式,需要在編譯php的時候加入此模組,於是在編譯腳本里增添 “–enable-bcmath” 後重新編譯、重啟apache然後此錯誤解決; 然後有遇到報錯“Class ‘SoapCl
python 正則 換行符問題 不支援(.*?)
有些換行符帶著 (.*?)匹配不到 就和很蛋疼 後來認識了\s 和\S 是完全通配的意思,\s是指空白,包括空格、換行、tab縮排等所有的空白,而\S剛好相反 這樣一正一反下來,就表示所有的字元,完全的,一字不漏的。 故而可以替換 p1 = r'(?<=<div cl
[Visual Studio C++] [MFC 除錯錯誤]:str.Format()不存在與引數列表匹配的過載函式
1.編譯問題描述: str.Format(“%d”,m_number)不存在與引數列表匹配的過載函式,紅色波浪線出現在“ . ”下方 2.錯誤程式碼:  
WIN10遠端:提示要求的函式不支援
開啟WIN家庭中文版的本地組策略 1、開啟tet複製以下程式碼: @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-P
python 中為什麼不需要過載
函式過載主要是為了解決兩個問題。 (1)可變引數型別。 (2) 可變引數個數。 另外,一個基本的設計原則是,僅僅當兩個函式除了引數型別和引數個數不同以外,其功能是完全相同的,此時才使用函式過載,如果兩個函式的功能其實不同,那麼不應當使用過載,而應當使用一個名字不同的函式。 好
遠端連線windows伺服器時提示:要求的函式不支援
win10系統遠端連線windows伺服器時提示下面圖片中的問題: 解決辦法: 開啟登錄檔, 將\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parame
VS2010 / VC2010 BUG應對:to_string 過載函式不完整導致編譯錯誤
按照C++11的標準,to_string函式對每個基礎算術型別均有過載函式。但是VC2010的C++庫中沒有實現所有的過載函式,而是隻實現了其中的幾個。 參見:http://connect.microsoft.com/VisualStudio/feedback/detai
出現身份驗證錯誤,要求的函式不支援,導致遠端桌面無法連線的問題
首先修改加密Oracle 另把一下程式碼編輯成cmd格式的檔案後以管理員執行即可。 @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Microsoft-Windows-Gro
selenium3 python 火狐瀏覽器 呼叫函式quit()函式後,瀏覽器關閉,geckorderiver不退出
環境: win10+selenium3+python3+火狐瀏覽器54 問題描述:呼叫函式quit()後瀏覽器關閉,但geckorderiver不退出,此時自動化測試流程卡住,沒有報錯,手動關閉geckorderiver流程可以正常繼續。 問題原因:經過多次實驗,發現該問題
疑問:Python跨模組呼叫函式時,被呼叫函式內部不能使用全域性變數
簡單案例: 模組1中的函式 def add(): print(a) if __name__=='__main__': a=10 add() 模組2中的函式 from 模組1 import add a=20 add()
sublime python mac不支援中文解決辦法
1. Tools -> Build System -> New Build System 2. 取名 PythonZH.sublime-build 3. 編輯 Pythonzh.sublime-build,輸入: { "env": {"LANG":