suchen
HeimBackend-EntwicklungPython-Tutorial17 Python-Tricks und Tricks zum Teilen

Eingeschränkte Schnittstellen zu externen

anzeigen. Bei der Veröffentlichung von Python-Paketen von Drittanbietern möchten Sie nicht alle in Ihrem Code können >Funktion oder Klasse extern all Attribut in init.py importiert werden und die Liste Der importierte Klassen- oder Funktionsname kann den Import einschränken und den externen Import anderer Funktionen oder Klassen verhindern.

17 Python-Tricks und Tricks zum Teilen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from base import APIBase
from client import Client
from decorator import interface, export, stream
from server import Server
from storage import Storage
from util import (LogFormatter, disable_logging_to_stderr,
                       enable_logging_to_kids, info)
all = ['APIBase', 'Client', 'LogFormatter', 'Server',
           'Storage', 'disable_logging_to_stderr', 'enable_logging_to_kids',
           'export', 'info', 'interface', 'stream']
Die Magie von with

with-Anweisung muss das

-Objekt des -Kontextverwaltungsprotokolls unterstützen. Kontext Das Verwaltungsprotokoll enthält zwei Methoden: Eingeben und Beenden. Die with-Anweisung stellt den Laufzeitkontext her und muss die Vorgänge Eintritt und Austritt über diese beiden Methoden ausführen.

wobei

Kontext Ausdruck der Ausdruck ist, der mit folgt, der ein Kontextverwaltungsobjekt zurückgibt.

# 常见with使用场景
with open("test.txt", "r") as my_file:  # 注意, 是enter()方法的返回值赋值给了my_file,
    for line in my_file:
        print line
Detaillierte Prinzipien finden Sie in diesem Artikel, einer kurzen Diskussion der with-Anweisung von Python.

Wenn wir die spezifischen Prinzipien kennen, können wir eine Klasse anpassen, die das Kontextverwaltungsprotokoll unterstützt, und die Eingabe- und Ausstiegsmethoden in der Klasse implementieren.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class MyWith(object):
    def init(self):
        print "init method"
    def enter(self):
        print "enter method"
        return self  # 返回对象给as后的变量
    def exit(self, exc_type, exc_value, exc_traceback):
        print "exit method"
        if exc_traceback is None:
            print "Exited without Exception"
            return True
        else:
            print "Exited with Exception"
            return False
def test_with():
    with MyWith() as my_with:
        print "running my_with"
    print "------分割线-----"
    with MyWith() as my_with:
        print "running before Exception"
        raise Exception
        print "running after Exception"
if name == 'main':
    test_with()
Die Ausführungsergebnisse lauten wie folgt:

init method
enter method
running my_with
exit method
Exited without Exception
------分割线-----
init method
enter method
running before Exception
exit method
Exited with Exception
Traceback (most recent call last):
  File "bin/python", line 34, in <module>
    exec(compile(filef.read(), file, "exec"))
  File "test_with.py", line 33, in <module>
    test_with()
  File "test_with.py", line 28, in test_with
    raise Exception
Exception</module></module>
beweist, dass zuerst die Eingabemethode ausgeführt wird, dann die darin enthaltene Logik aufgerufen wird und schließlich beendet wird wird zur Exit-Verarbeitung ausgeführt und kann auch dann normal beendet werden, wenn eine Ausnahme auftritt

Verwendung von Filter

Im Vergleich zu Filter,

Karte und „Reduzieren“ wird, wie der Name schon sagt, häufiger verwendet. Eine Zeile zur Beurteilung

#!/usr/bin/env python
# -*- coding: utf-8 -*-
lst = [1, 2, 3, 4, 5, 6]
# 所有奇数都会返回True, 偶数会返回False被过滤掉
print filter(lambda x: x % 2 != 0, lst)
#输出结果
[1, 3, 5]
Wenn die Bedingung erfüllt ist, wird die Variable nach dem Gleichheitszeichen zurückgegeben, andernfalls wird die Anweisung nach dem „else“ zurückgegeben.

Einzelfall von Decorator

lst = [1, 2, 3]
new_lst = lst[0] if lst is not None else None
print new_lst
# 打印结果
1

Verwenden Sie Decorator, um ein einfaches

Einzelfallmuster zu implementieren

statisch
# 单例装饰器
def singleton(cls):
    instances = dict()  # 初始为空
    def _singleton(*args, **kwargs):
        if cls not in instances:  #如果不存在, 则创建并放入字典
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return _singleton
@singleton
class Test(object):
    pass
if name == 'main':
    t1 = Test()
    t2 = Test()
    # 两者具有相同的地址
    print t1, t2
Methodendekorateur

Zwei häufig verwendete Dekorationen in Klassen, zunächst unterscheiden sie:

gewöhnliche Mitgliedsfunktion, von denen die erste implizit ist Die Formelparameter sind
    Objekt
  • Klassenmethodendekorator
  • , Klassenmethode (sie fühlt sich der Klassenmethode in OC sehr ähnlich), wobei der erste ein impliziter Parameter ist die

    -Klasse

  • staticmethod decorator
  • , die in Python keine impliziten Parameter

    hat. Der statische Die Methode ähnelt der statischen Methode in C++

  • Property Decorator
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class A(object):
    # 普通成员函数
    def foo(self, x):
        print "executing foo(%s, %s)" % (self, x)
    @classmethod   # 使用classmethod进行装饰
    def class_foo(cls, x):
        print "executing class_foo(%s, %s)" % (cls, x)
    @staticmethod  # 使用staticmethod进行装饰
    def static_foo(x):
        print "executing static_foo(%s)" % x
def test_three_method():
    obj = A()
    # 直接调用噗通的成员方法
    obj.foo("para")  # 此处obj对象作为成员函数的隐式参数, 就是self
    obj.class_foo("para")  # 此处类作为隐式参数被传入, 就是cls
    A.class_foo("para")  #更直接的类方法调用
    obj.static_foo("para")  # 静态方法并没有任何隐式参数, 但是要通过对象或者类进行调用
    A.static_foo("para")
if name == 'main':
    test_three_method()

# 函数输出
executing foo(<main.a>, para)
executing class_foo(<class>, para)
executing class_foo(<class>, para)
executing static_foo(para)
executing static_foo(para)</class></class></main.a>

Private Klasseneigenschaften definieren
  • fget ist eine Funktion zum Abrufen des Werts des Attributs, fset ist die Funktion zum Festlegen des Attributwerts, fdel ist die Funktion zum

    Löschen des
  • -Attributs, doc ist ein Zeichenfolge

    (wie Annotation ). Aus Sicht der Implementierung sind diese Parameter optional. Eigenschaft verfügt über drei Methoden getter(), setter() und delete(), um fget, fset und fdel anzugeben. Dies bedeutet die folgende Zeile:

    #python内建函数
    property(fget=None, fset=None, fdel=None, doc=None)

    iter magicDurch die Kombination von yield und iter können wir ein Objekt in ein iterierbares

    Durch Umschreiben von str können Sie das Objekt direkt in der gewünschten Form drucken

    class Student(object):
        @property  #相当于property.getter(score) 或者property(score)
        def score(self):
            return self._score
        @score.setter #相当于score = property.setter(score)
        def score(self, value):
            if not isinstance(value, int):
                raise ValueError('score must be an integer!')
            if value  100:
                raise ValueError('score must between 0 ~ 100!')
            self._score = value
    Magischer Teil

    Teilweise ist sehr einfach zu verwenden Wie Funktoren (Funktionsobjekte) in C++.
    • In Stack

      Overflow

      wird eine ähnliche Operationsmethode wie bei Partial angegeben:
    • Verwenden Sie die Funktionsbindung von

      Closure
    • , um eine Vorbindung durchzuführen Definieren Sie einige
    Funktionsparameter
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    class TestIter(object):
        def init(self):
            self.lst = [1, 2, 3, 4, 5]
        def read(self):
            for ele in xrange(len(self.lst)):
                yield ele
        def iter(self):
            return self.read()
        def str(self):
            return ','.join(map(str, self.lst))
    
        repr = str
    def test_iter():
        obj = TestIter()
        for num in obj:
            print num
        print obj
    if name == 'main':
        test_iter()
    und geben Sie eine aufrufbare Variable zurück, bis der eigentliche Aufruf ausgeführt wird:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    from functools import partial
    def sum(a, b):
        return a + b
    def test_partial():
        fun = partial(sum, 2)   # 事先绑定一个参数, fun成为一个只需要一个参数的可调用变量
        print fun(3)  # 实现执行的即是sum(2, 3)
    if name == 'main':
        test_partial()
    
    # 执行结果
    5

    神秘eval

    eval我理解为一种内嵌的python解释器(这种解释可能会有偏差), 会解释字符串为对应的代码并执行, 并且将执行结果返回。

    看一下下面这个例子:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    def test_first():
        return 3
    def test_second(num):
        return num
    action = {  # 可以看做是一个sandbox
            "para": 5,
            "test_first" : test_first,
            "test_second": test_second
            }
    def test_eavl():  
        condition = "para == 5 and test_second(test_first) > 5"
        res = eval(condition, action)  # 解释condition并根据action对应的动作执行
        print res
    if name == '_

    exec

    • exec在Python中会忽略返回值, 总是返回None, eval会返回执行代码或语句的返回值

    • exec和eval在执行代码时, 除了返回值其他行为都相同

    • 在传入字符串时, 会使用compile(source, ‘string>’, mode)编译字节码。 mode的取值为exec和eval

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    def test_first():
        print "hello"
    def test_second():
        test_first()
        print "second"
    def test_third():
        print "third"
    action = {
            "test_second": test_second,
            "test_third": test_third
            }
    def test_exec():
        exec "test_second" in action
    if name == 'main':
        test_exec()  # 无法看到执行结果

    getattr

    getattr(object, name[, default])返回对象的命名属性,属性名必须是字符串。如果字符串是对象的属性名之一,结果就是该属性的值。例如, getattr(x, ‘foobar’) 等价于 x.foobar。 如果属性名不存在,如果有默认值则返回默认值,否则触发 AttributeError 。

    # 使用范例
    class TestGetAttr(object):
        test = "test attribute"
        def say(self):
            print "test method"
    def test_getattr():
        my_test = TestGetAttr()
        try:
            print getattr(my_test, "test")
        except AttributeError:
            print "Attribute Error!"
        try:
            getattr(my_test, "say")()
        except AttributeError: # 没有该属性, 且没有指定返回值的情况下
            print "Method Error!"
    if name == 'main':
        test_getattr()
    
    # 输出结果
    test attribute
    test method

    命令行处理

    def process_command_line(argv):
        """
        Return a 2-tuple: (settings object, args list).
        `argv` is a list of arguments, or `None` for ``sys.argv[1:]``.
        """
        if argv is None:
            argv = sys.argv[1:]
        # initialize the parser object:
        parser = optparse.OptionParser(
            formatter=optparse.TitledHelpFormatter(width=78),
            add_help_option=None)
        # define options here:
        parser.add_option(      # customized description; put --help last
            '-h', '--help', action='help',
            help='Show this help message and exit.')
        settings, args = parser.parse_args(argv)
        # check number of arguments, verify values, etc.:
        if args:
            parser.error('program takes no command-line arguments; '
                         '"%s" ignored.' % (args,))
        # further process settings & args if necessary
        return settings, args
    def main(argv=None):
        settings, args = process_command_line(argv)
        # application code here, like:
        # run(settings, args)
        return 0        # success
    if name == 'main':
        status = main()
        sys.exit(status)

    读写csv文件

    # 从csv中读取文件, 基本和传统文件读取类似
    import csv
    with open('data.csv', 'rb') as f:
        reader = csv.reader(f)
        for row in reader:
            print row
    # 向csv文件写入
    import csv
    with open( 'data.csv', 'wb') as f:
        writer = csv.writer(f)
        writer.writerow(['name', 'address', 'age'])  # 单行写入
        data = [
                ( 'xiaoming ','china','10'),
                ( 'Lily', 'USA', '12')]
        writer.writerows(data)  # 多行写入

    各种时间形式转换

    只发一张网上的图, 然后查文档就好了, 这个是记不住的

    17 Python-Tricks und Tricks zum Teilen

    字符串格式化

    一个非常好用, 很多人又不知道的功能:

    >>> name = "andrew"
    >>> "my name is {name}".format(name=name)
    'my name is andrew'

    Das obige ist der detaillierte Inhalt von17 Python-Tricks und Tricks zum Teilen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Wie können Sie Elemente an ein Python -Array anhängen?Wie können Sie Elemente an ein Python -Array anhängen?Apr 30, 2025 am 12:19 AM

    Inpython, youAppendElementStoAlistusedtheAppend () Methode.1) UseAppend () ForsingleElelements: my_list.append (4) .2) usextend () oder = formulnElements: my_list.extend (andere_list) ormy_list = [4,5,6] .3) useInSert () FORSPECIFIFICISPositionen: my_list.insert (1,5) .Beaware

    Wie debuggen Sie Probleme mit dem in SHEBANG verwandten Problem?Wie debuggen Sie Probleme mit dem in SHEBANG verwandten Problem?Apr 30, 2025 am 12:17 AM

    Zu den Methoden zum Debuggen des Shebang -Problems gehören: 1.. Überprüfen Sie die SHEBANG -Zeile, um sicherzustellen, dass es sich um die erste Zeile des Skripts handelt, und es gibt keine vorangestellten Räume. 2. Überprüfen Sie, ob der Dolmetscherpfad korrekt ist; 3. Rufen Sie den Dolmetscher direkt an, um das Skript auszuführen, um das Problem der Shebang zu isolieren. 4. Verwenden Sie Strace oder Trusts, um die Systemaufrufe zu verfolgen. 5. Überprüfen Sie die Auswirkungen von Umgebungsvariablen auf Shebang.

    Wie entfernen Sie Elemente aus einem Python -Array?Wie entfernen Sie Elemente aus einem Python -Array?Apr 30, 2025 am 12:16 AM

    PythonlistscanbemanipuleduseveralmethodstoremoveElements: 1) theremove () methodremoveFirstoccurce -ofaspecifiedValue.2) thepop () methodremovesandreturnsanelementatagivedEx.3) theedelstatementcanremoveMeMeMeMeTex.

    Welche Datentypen können in einer Python -Liste gespeichert werden?Welche Datentypen können in einer Python -Liste gespeichert werden?Apr 30, 2025 am 12:07 AM

    PythonlistscanstoreanyDatatype, einschließlich Integren, Streicher, Schwimmkörper, Booleans, anderen Listen und Dotionen. ThisverSatilityAllows-Formixed-Typen, die kanbemännische EffectivantivinyusingTypecks, TypenHints und spezialisierte LikenumpyForperformance

    Was sind einige gängige Operationen, die auf Python -Listen ausgeführt werden können?Was sind einige gängige Operationen, die auf Python -Listen ausgeführt werden können?Apr 30, 2025 am 12:01 AM

    PythonlistsSupportnumousoperationen: 1) AddelementsWithAppend (), Extend (), andInsert (). 2) REMVERGENDEMODESUSUSUSSUMOVER (), POP () und Clear (). 3) Accessing undModifyingWithindexingandSlicing.4) SearchingandSortingWithindEx (), Sorte (), und Sortex ()

    Wie erstellen Sie mehrdimensionale Arrays mit Numpy?Wie erstellen Sie mehrdimensionale Arrays mit Numpy?Apr 29, 2025 am 12:27 AM

    Durch die folgenden Schritte können mehrdimensionale Arrays mit Numpy erstellt werden: 1) Verwenden Sie die Funktion numpy.array (), um ein Array wie NP.Array ([1,2,3], [4,5,6]) zu erstellen, um ein 2D-Array zu erstellen; 2) Verwenden Sie np.zeros (), np.ones (), np.random.random () und andere Funktionen, um ein Array zu erstellen, das mit spezifischen Werten gefüllt ist; 3) Verstehen Sie die Form- und Größeneigenschaften des Arrays, um sicherzustellen, dass die Länge des Unterarrays konsistent ist und Fehler vermeiden. 4) Verwenden Sie die Funktion np.reshape (), um die Form des Arrays zu ändern. 5) Achten Sie auf die Speichernutzung, um sicherzustellen, dass der Code klar und effizient ist.

    Erklären Sie das Konzept des 'Rundfunks' in Numpy -Arrays.Erklären Sie das Konzept des 'Rundfunks' in Numpy -Arrays.Apr 29, 2025 am 12:23 AM

    SendeminnumpyissamethodtoperformoperationsonarraysofdifferentShapesByAutomaticaligningTHem.itsimplifiesCode, Verbesserung der Verschiebbarkeit, und BoostSPerformance.her'Showitworks: 1) kleinereArraysArepaddedwithonestOMatchDimens.2) compatibledimens

    Erklären Sie, wie Sie zwischen Listen, Array.Array und Numpy -Arrays für die Datenspeicherung auswählen.Erklären Sie, wie Sie zwischen Listen, Array.Array und Numpy -Arrays für die Datenspeicherung auswählen.Apr 29, 2025 am 12:20 AM

    Forpythondatastorage, ChooselistsforflexibilitätswithmixedDatatypes, Array.Arrayformemory-effizientesHomogenoususnumericalData und NumpyArraysForAdvancedNumericalComputing.ListsareversAntileffictionForLarGenicalDataSetsetaSets;

    See all articles

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Herunterladen der Mac-Version des Atom-Editors

    Herunterladen der Mac-Version des Atom-Editors

    Der beliebteste Open-Source-Editor

    EditPlus chinesische Crack-Version

    EditPlus chinesische Crack-Version

    Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Sicherer Prüfungsbrowser

    Sicherer Prüfungsbrowser

    Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

    SAP NetWeaver Server-Adapter für Eclipse

    SAP NetWeaver Server-Adapter für Eclipse

    Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.