python函數(shù)缺省值與引用學(xué)習(xí)筆記分享
更新時(shí)間:2013年02月10日 18:30:52 作者:
有關(guān)一個(gè)在函數(shù)參數(shù)設(shè)置缺省值與引用的問題,這個(gè)問題是大多數(shù)Pythoner可能會(huì)忽視的問題,作個(gè)筆記,以備后閱,同時(shí)供需要的朋友參考
復(fù)制代碼 代碼如下:
import random, string
class C(object): pass
def dangerFunction(msg, l = [], b = {}, c = C()):
print msg, '-'*10
print l, b, c.__dict__
l.append(1)
b[random.choice(string.ascii_lowercase)] = ''
c.__dict__[random.choice(string.ascii_lowercase)] = ""
print l, b, c.__dict__
dangerFunction('1')
dangerFunction('2')
dangerFunction('3')
print '-'*20
def safeFunction(msg, l = None, b = None, c = None):
if not l: l = []
if not b: b = {}
if not c: c = C()
print msg, '-'*10
print l, b, c.__dict__
l.append(1)
b[random.choice(string.ascii_lowercase)] = ''
c.__dict__[random.choice(string.ascii_lowercase)] = ""
print l, b, c.__dict__
safeFunction('1')
safeFunction('2')
safeFunction('3')
運(yùn)行結(jié)果:
復(fù)制代碼 代碼如下:
1 ----------
[] {} {}
[1] {'q': ''} {'p': ''}
2 ----------
[1] {'q': ''} {'p': ''}
[1, 1] {'q': '', 'a': ''} {'p': '', 'g': ''}
3 ----------
[1, 1] {'q': '', 'a': ''} {'p': '', 'g': ''}
[1, 1, 1] {'q': '', 'a': '', 'w': ''} {'p': '', 'w': '', 'g': ''}
--------------------
1 ----------
[] {} {}
[1] {'k': ''} {'l': ''}
2 ----------
[] {} {}
[1] {'r': ''} {'c': ''}
3 ----------
[] {} {}
[1] {'q': ''} {'h': ''}
由dangerFunction打印出來的結(jié)果來看,缺省值為 [], (), class
再下次調(diào)用時(shí),如果繼續(xù)參數(shù)空缺而使用缺省值,那么缺省值延續(xù)上次引用。
可能打印無任何標(biāo)志無法看清楚,加上文字應(yīng)該會(huì)簡(jiǎn)單很多。
復(fù)制代碼 代碼如下:
# -*- coding: utf-8 -*-
import random, string
class C(object): pass
def dangerFunction(msg, l = [], b = {}, c = C()):
print msg, '-'*10
print u'操作前', l, b, c.__dict__
l.append(1)
b[random.choice(string.ascii_lowercase)] = ''
c.__dict__[random.choice(string.ascii_lowercase)] = ""
print u'操作后', l, b, c.__dict__
dangerFunction('1')
dangerFunction('2')
dangerFunction('3')
print '-' * 10, u'我是分隔符', '-' * 10
def safeFunction(msg, l = None, b = None, c = None):
if not l: l = []
if not b: b = {}
if not c: c = C()
print msg, '-'*10
print u'操作前', l, b, c.__dict__
l.append(1)
b[random.choice(string.ascii_lowercase)] = ''
c.__dict__[random.choice(string.ascii_lowercase)] = ""
print u'操作后',l, b, c.__dict__
safeFunction('1')
safeFunction('2')
safeFunction('3')
復(fù)制代碼 代碼如下:
1 ----------
操作前 [] {} {}
操作后 [1] {'m': ''} {'v': ''}
2 ----------
操作前 [1] {'m': ''} {'v': ''}
操作后 [1, 1] {'i': '', 'm': ''} {'g': '', 'v': ''}
3 ----------
操作前 [1, 1] {'i': '', 'm': ''} {'g': '', 'v': ''}
操作后 [1, 1, 1] {'i': '', 's': '', 'm': ''} {'s': '', 'g': '', 'v': ''}
---------- 我是分隔符 ----------
1 ----------
操作前 [] {} {}
操作后 [1] {'e': ''} {'q': ''}
2 ----------
操作前 [] {} {}
操作后 [1] {'d': ''} {'s': ''}
3 ----------
操作前 [] {} {}
操作后 [1] {'m': ''} {'k': ''}
相關(guān)文章
Python3實(shí)現(xiàn)zip分卷壓縮過程解析
這篇文章主要介紹了Python3實(shí)現(xiàn)zip分卷壓縮過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
Python+tkinter實(shí)現(xiàn)高清圖片保存
作為愛玩電腦的你是不是也需要經(jīng)常更換一下自己的電腦壁紙呢?但是在網(wǎng)上有很多心儀的圖片想要保存下來,如果一張張的去保存那效率又低。所以本文用Python寫一個(gè)保存圖片的功能,把我們的圖片給保存到我們的電腦,需要的可以參考一下2022-03-03
python利用TextBlob庫(kù)實(shí)現(xiàn)輕松分析文本情感
TextBlob是一個(gè)基于NLTK(Natural Language Toolkit)和Pattern庫(kù)的Python庫(kù),它提供了一系列方便的接口和方法來處理文本數(shù)據(jù),下面我們就來學(xué)習(xí)一下如何利用TextBlob庫(kù)實(shí)現(xiàn)輕松分析文本情感吧2023-12-12
Python趣味挑戰(zhàn)之教你用pygame畫進(jìn)度條
pygame四種方法教會(huì)你畫進(jìn)度條,其實(shí)也不難,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
python PyQt5中單行文本輸入控件QLineEdit用法詳解
在PyQt5的GUI編程中,QLineEdit控件是一個(gè)用于輸入和編輯單行文本的部件,它提供了豐富的功能和靈活性,可以輕松地實(shí)現(xiàn)用戶輸入的捕獲、驗(yàn)證和格式化等功能,本文將通過實(shí)際案例詳細(xì)介紹QLineEdit控件的常用方法,需要的朋友可以參考下2024-08-08
Python?OpenCV超詳細(xì)講解透視變換的實(shí)現(xiàn)
OpenCV用C++語言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實(shí)時(shí)視覺應(yīng)用,并在可用時(shí)利用MMX和SSE指令,本篇文章帶你通過OpenCV實(shí)現(xiàn)透視變換2022-04-04
Python?VisPy庫(kù)高性能科學(xué)可視化圖形處理用法實(shí)例探究
VisPy是一個(gè)用于高性能科學(xué)可視化的Python庫(kù),它建立在現(xiàn)代圖形處理單元(GPU)上,旨在提供流暢、交互式的數(shù)據(jù)可視化體驗(yàn),本文將深入探討VisPy的基本概念、核心特性以及實(shí)際應(yīng)用場(chǎng)景,并通過豐富的示例代碼演示其強(qiáng)大的可視化能力2023-12-12

