17 trucs et astuces Python à partager
Afficher l'interface limitée aux
externes Lors de la publication de packages python tiers, vous ne voulez pas que tout soit présent votre code >Fonction ou class peut être importé en externe, ajoutez all attribut dans init.py et remplissez la list La classe ou le nom de fonction importé peut limiter l'importation et empêcher l'importation externe d'autres fonctions ou classes.
#!/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']
La magie de with
with instruction doit prendre en charge l' objet du protocole de gestion de contexte, contexte Le protocole de gestion contient deux méthodes : entrer et sortir. L'instruction with établit le contexte d'exécution et doit effectuer les opérations d'entrée et de sortie via ces deux méthodes.
où contexte expression est l'expression qui suit avec, qui renvoie un objet de gestion de contexte.
# 常见with使用场景 with open("test.txt", "r") as my_file: # 注意, 是enter()方法的返回值赋值给了my_file, for line in my_file: print line
Pour des principes détaillés, vous pouvez consulter cet article, une brève discussion sur la déclaration Python.
Connaissant les principes spécifiques, nous pouvons personnaliser une classe qui prend en charge le protocole de gestion de contexte et implémenter les méthodes d'entrée et de sortie dans la classe.
#!/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()
Les résultats de l'exécution sont les suivants :
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>
prouve que la méthode enter sera exécutée en premier, puis la logique à l'intérieur de with sera appelée, et enfin exit sera exécuté pour le traitement de sortie, et même s'il peut se terminer normalement même si une exception se produit
Utilisation du filtre
Par rapport au filtre, map et réduire sont utilisés plus fréquemment. Filtrer est comme son nom Filtre certains éléments selon certaines règles.
#!/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]
Une ligne pour le jugement
Lorsque la condition est remplie, la variable après le signe égal est renvoyée, sinon l'instruction après le else est renvoyée.
lst = [1, 2, 3] new_lst = lst[0] if lst is not None else None print new_lst # 打印结果 1
Cas unique de décorateur
Utilisez le décorateur pour mettre en œuvre un simple modèle de cas unique
# 单例装饰器 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
statiqueméthode décorateur
Deux décorations couramment utilisées dans les classes, distinguez-les d'abord :
fonction membre ordinaire, dont la première est implicite Les paramètres de la formule sont objet
décorateur de méthode de classe, méthode de classe (elle ressemble beaucoup à la méthode de classe en OC), où le premier Un paramètre implicite est la classe
décorateur de méthode statique, qui n'a aucun paramètre implicite en python Le statique. La méthode est similaire à la méthode statique en C
#!/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>
décorateur de propriétés
Définir les propriétés de classe privée
supprimer l'attribut , doc est un string (Comme annotation ). Du point de vue de la mise en œuvre, ces paramètres sont facultatifs.
property a trois méthodes getter(), setter() et#python内建函数 property(fget=None, fset=None, fdel=None, doc=None)
() pour spécifier fget, fset et fdel. Cela signifie la ligne suivante : iter magic
En combinant rendement et iter, on peut transformer un objet en itérable En réécrivant str, vous pouvez imprimer l'objet directement sous la forme souhaitéeclass 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
- Partiel magiquepartial est très simple à utiliser Comme les foncteurs (objets fonction) en C.
- Dans stack
overflow
, une méthode d'opération similaire à partielle est donnée :
#!/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()
fermeture
pour pré-lier Définissez quelquesparamètres de fonction
et renvoyez une variable appelable jusqu'à ce que l'appel réel soit exécuté :#!/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) # 多行写入
各种时间形式转换
只发一张网上的图, 然后查文档就好了, 这个是记不住的
字符串格式化
一个非常好用, 很多人又不知道的功能:
>>> name = "andrew" >>> "my name is {name}".format(name=name) 'my name is andrew'
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La clé du contrôle des plumes est de comprendre sa nature progressive. Le PS lui-même ne fournit pas la possibilité de contrôler directement la courbe de gradient, mais vous pouvez ajuster de manière flexible le rayon et la douceur du gradient par plusieurs plumes, des masques correspondants et des sélections fines pour obtenir un effet de transition naturel.

L'article présente le fonctionnement de la base de données MySQL. Tout d'abord, vous devez installer un client MySQL, tel que MySQLWorkBench ou le client de ligne de commande. 1. Utilisez la commande MySQL-UROot-P pour vous connecter au serveur et connecter avec le mot de passe du compte racine; 2. Utilisez Createdatabase pour créer une base de données et utilisez Sélectionner une base de données; 3. Utilisez CreateTable pour créer une table, définissez des champs et des types de données; 4. Utilisez InsertInto pour insérer des données, remettre en question les données, mettre à jour les données par mise à jour et supprimer les données par Supprimer. Ce n'est qu'en maîtrisant ces étapes, en apprenant à faire face à des problèmes courants et à l'optimisation des performances de la base de données que vous pouvez utiliser efficacement MySQL.

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

La plume PS est un effet flou du bord de l'image, qui est réalisé par la moyenne pondérée des pixels dans la zone de bord. Le réglage du rayon de la plume peut contrôler le degré de flou, et plus la valeur est grande, plus elle est floue. Le réglage flexible du rayon peut optimiser l'effet en fonction des images et des besoins. Par exemple, l'utilisation d'un rayon plus petit pour maintenir les détails lors du traitement des photos des caractères et l'utilisation d'un rayon plus grand pour créer une sensation brumeuse lorsque le traitement de l'art fonctionne. Cependant, il convient de noter que trop grand, le rayon peut facilement perdre des détails de bord, et trop petit, l'effet ne sera pas évident. L'effet de plumes est affecté par la résolution de l'image et doit être ajusté en fonction de la compréhension de l'image et de la saisie de l'effet.

L'optimisation des performances MySQL doit commencer à partir de trois aspects: configuration d'installation, indexation et optimisation des requêtes, surveillance et réglage. 1. Après l'installation, vous devez ajuster le fichier my.cnf en fonction de la configuration du serveur, tel que le paramètre innodb_buffer_pool_size, et fermer query_cache_size; 2. Créez un index approprié pour éviter les index excessifs et optimiser les instructions de requête, telles que l'utilisation de la commande Explication pour analyser le plan d'exécution; 3. Utilisez le propre outil de surveillance de MySQL (ShowProcessList, Showstatus) pour surveiller la santé de la base de données, et sauvegarde régulièrement et organisez la base de données. Ce n'est qu'en optimisant en continu ces étapes que les performances de la base de données MySQL peuvent être améliorées.

Guide d'optimisation des performances de la base de données MySQL dans les applications à forte intensité de ressources, la base de données MySQL joue un rôle crucial et est responsable de la gestion des transactions massives. Cependant, à mesure que l'échelle de l'application se développe, les goulots d'étranglement des performances de la base de données deviennent souvent une contrainte. Cet article explorera une série de stratégies efficaces d'optimisation des performances MySQL pour garantir que votre application reste efficace et réactive dans des charges élevées. Nous combinerons des cas réels pour expliquer les technologies clés approfondies telles que l'indexation, l'optimisation des requêtes, la conception de la base de données et la mise en cache. 1. La conception de l'architecture de la base de données et l'architecture optimisée de la base de données sont la pierre angulaire de l'optimisation des performances MySQL. Voici quelques principes de base: sélectionner le bon type de données et sélectionner le plus petit type de données qui répond aux besoins peut non seulement économiser un espace de stockage, mais également améliorer la vitesse de traitement des données.

Les plumes de PS peuvent entraîner une perte de détails d'image, une saturation des couleurs réduite et une augmentation du bruit. Pour réduire l'impact, il est recommandé d'utiliser un rayon de plumes plus petit, de copier la couche puis de plume, et de comparer soigneusement la qualité d'image avant et après les plumes. De plus, les plumes ne conviennent pas à tous les cas, et parfois les outils tels que les masques conviennent plus à la gestion des bords de l'image.

Raisons et solutions courantes pour l'échec de l'installation MySQL: 1. Nom d'utilisateur ou mot de passe incorrect, ou le service MySQL n'est pas démarré, vous devez vérifier le nom d'utilisateur et le mot de passe et démarrer le service; 2. Conflits portuaires, vous devez modifier le port d'écoute MySQL ou fermer le programme qui occupe le port 3306; 3. La bibliothèque de dépendances est manquante, vous devez utiliser le gestionnaire de package système pour installer la bibliothèque de dépendances nécessaires; 4. Autorisations insuffisantes, vous devez utiliser les droits de Sudo ou d'administrateur pour exécuter l'installateur; 5. Fichier de configuration incorrect, vous devez vérifier le fichier de configuration My.cnf pour vous assurer que la configuration est correcte. Ce n'est qu'en travaillant régulièrement et soigneusement que MySQL peut être installé en douceur.
