2011-09-10 43 views
24
def save_file(self, outputfilename = self.image_filename): 
    self.file.read(outputfilename) 
    .... 

için varsayılan değer olarak NameError: name 'self' is not defined değerini ilk satırda kullanır. Python bunu kabul etmiyor gibi görünüyor. Kodu nasıl yeniden yazabilirim, böylece bir istisna oluşturmaz?Otomatik olarak *

+0

İşlev tanımı farklı bir kapsamda ve farklı bir zamanda gerçekleşir. –

+0

İşe yarayacaksa iyi olur. Kodu çok daha temiz hale getirir. Sanırım uygulamak için başka bir Pandoran Kutusu açacak mı? –

cevap

25

Varsayılan olarak None kullanın ve bunu algılayın.

def save_file(self, outputfilename=None): 
    if outputfilename is None: 
     outputfilename = self.image_filename 
    self.file.read(outputfilename) 
    .... 
+2

Bu modeldeki problem yanıltıcıdır. – Nikolai

3
def save_file(self, outputfilename = None): 
    if not outputfilename: 
     outputfilename = self.image_filename 
    self.file.read(outputfilename) 
    .... 
11

documentation belirtir: fonksiyon tanımlama yürütüldüğünde

varsayılan parametre değerleri değerlendirilir.

Bu, örneklerin neden başvuruda bulunulmayacağını açıklar. Başkalarının söylediği gibi, Yok'u varsayılan olarak kullanın ve örneği kullanılabilir olduğunda işlevi yürütme zamanında düzeltin.

2
def save_file(self, outputfilename=None): 
    outputfilename = outputfilename or self.image_filename 
    self.file.read(outputfilename) 

hatta

def save_file(self, outputfilename=None):   
    self.file.read(outputfilename or self.image_filename) 

Bu bir değişkenli bir şey olabilir, ama eğer varsa, en, 5 diyelim olabilir, bu benim görüşüme göre daha kolay okunur kod yapar.

İlgili konular