Python 関数クラスの糖衣構文

Nov 22, 2016 pm 03:56 PM
python

Python 構文シュガー

、改行接続

s = ''
s += 'a' + \
     'b' + \
     'c'
n = 1 + 2 + \
3
# 6
ログイン後にコピー

while、for ループ外の else

while ループが正常に終了した場合 (ブレーク終了なし)、else が実行されます。

num = [1,2,3,4]
mark = 0while mark < len(num):
    n = num[mark]    if n % 2 == 0:   
     print(n)        # break
    mark += 1else: print("done")
ログイン後にコピー

zip() 並列反復

a = [1,2,3]
b = [&#39;one&#39;,&#39;two&#39;,&#39;three&#39;]
list(zip(a,b))
# [(1, &#39;one&#39;), (2, &#39;two&#39;), (3, &#39;three&#39;)]
ログイン後にコピー

リスト内包表記

x = [num for num in range(6)]
# [0, 1, 2, 3, 4, 5]
y = [num for num in range(6) if num % 2 == 0]
# [0, 2, 4]

# 多层嵌套
rows = range(1,4)
cols = range(1,3)
for i in rows:
    for j in cols:
        print(i,j)
# 同
rows = range(1,4)
cols = range(1,3)
x = [(i,j) for i in rows for j in cols]
ログイン後にコピー

辞書内包表記

{ key_exp : value_exp from iterable 内の式 }

#查询每个字母出现的次数。
strs = &#39;Hello World&#39;
s = { k : strs.count(k) for k in set(strs) }
ログイン後にコピー

Set 内包表記

{iterable 内の式の式 }

タプル 派生はありません

タプルの導出をリストの導出だと思って括弧に変更していたのですが、後からジェネレーターの導出であることに気づきました。

ジェネレーター導出

>>> num = ( x for x in range(5) )>>> num
...:<generator object <genexpr> at 0x7f50926758e0>
ログイン後にコピー

関数

函数关键字参数,默认参数值

def do(a=0,b,c)
    return (a,b,c)

do(a=1,b=3,c=2)
ログイン後にコピー

函数默认参数值在函数定义时已经计算出来,而不是在程序运行时。
列表字典等可变数据类型不可以作为默认参数值。

def buygy(arg, result=[]):
    result.append(arg)
    print(result)
ログイン後にコピー

changed:

def nobuygy(arg, result=None):
    if result == None:
        result = []
    result.append(arg)
    print(result)
# or
def nobuygy2(arg):
    result = []
    result.append(arg)
    print(result)
ログイン後にコピー

*args 收集位置参数

def do(*args):
    print(args)
do(1,2,3)
(1,2,3,&#39;d&#39;)
ログイン後にコピー

**kwargs 收集关键字参数

def do(**kwargs):
  print(kwargs)
do(a=1,b=2,c=&#39;la&#39;)
# {&#39;c&#39;: &#39;la&#39;, &#39;a&#39;: 1, &#39;b&#39;: 2}
ログイン後にコピー

lamba 匿名函数

a = lambda x: x*x
a(4)
# 16
ログイン後にコピー

生成器

生成器是用来创建Python序列的一个对象。可以用它迭代序列而不需要在内存中创建和存储整个序列。
通常,生成器是为迭代器产生数据的。

生成器函数函数和普通函数类似,返回值使用 yield 而不是 return 。

def my_range(first=0,last=10,step=1):
    number = first
    while number < last:
        yield number
        number += step

>>> my_range()
... <generator object my_range at 0x7f02ea0a2bf8>
ログイン後にコピー

装饰器

有时需要在不改变源代码的情况下修改已经存在的函数。
装饰器实质上是一个函数,它把函数作为参数输入到另一个函数。 举个栗子:

# 一个装饰器
def document_it(func):
    def new_function(*args, **kwargs):
        print("Runing function: ", func.__name__)
        print("Positional arguments: ", args)
        print("Keyword arguments: ", kwargs)
        result = func(*args, **kwargs)
        print("Result: " ,result)
        return result
    return new_function

# 人工赋值
def add_ints(a, b):
    return a + b

cooler_add_ints = document_it(add_ints) #人工对装饰器赋值
cooler_add_ints(3,5)

# 函数器前加装饰器名字
@document_it
def add_ints(a, b):
    return a + b
ログイン後にコピー

可以使用多个装饰器,多个装饰由内向外向外顺序执行。

命名空间和作用域

a = 1234
def test():
    print("a = ",a) # True
####
a = 1234
def test():
    a = a -1    #False
    print("a = ",a)
ログイン後にコピー

可以使用全局变量 global a 。

a = 1234
def test():
    global a
    a = a -1    #True
    print("a = ",a)
ログイン後にコピー

Python 提供了两个获取命名空间内容的函数 local() global()

_ 和 __

Python 保留用法。 举个栗子:

def amazing():
    &#39;&#39;&#39;This is the amazing.
    Hello
    world&#39;&#39;&#39;
    print("The function named: ", amazing.__name__)
    print("The function docstring is: \n", amazing.__doc__)
ログイン後にコピー

异常处理,try...except

只有错误发生时才执行的代码。 举个栗子:

>>> l = [1,2,3]
>>> index = 5
>>> l[index]
Traceback (most recent call last):
  File "<stdin>", line 1, in 
  <module>IndexError: list index out of range
ログイン後にコピー

再试下:

>>> l = [1,2,3]
>>> index = 5
>>> try:
...     l[index]
... except:
...     print("Error: need a position between 0 and", len(l)-1, ", But got", index)
...
Error: need a position between 0 and 2 , But got 5
ログイン後にコピー

没有自定异常类型使用任何错误。

获取异常对象,except exceptiontype as name

hort_list = [1,2,3]while 1:
    value = input("Position [q to quit]? ")    if value == &#39;q&#39;:        break
    try:
        position = int(value)
        print(short_list[position])    except IndexError as err:
        print("Bad index: ", position)    except Exception as other:
        print("Something else broke: ", other)
ログイン後にコピー

自定义异常

异常是一个类。类 Exception 的子类。

class UppercaseException(Exception):
    pass

words = [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;AA&#39;]
for i in words:
    if i.isupper():
        raise UppercaseException(i)
# error
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
__main__.UppercaseException: AA
ログイン後にコピー

命令行参数

命令行参数

python文件:

import sys
print(sys.argv)
ログイン後にコピー

PPrint()友好输出

与print()用法相同,输出结果像是列表字典时会不同。

子类super()调用父类方法

举个栗子:

class Person():
    def __init__(self, name):
        self.name = nameclass email(Person):
    def __init__(self, name, email):
        super().__init__(name)
        self.email = email

a = email(&#39;me&#39;, &#39;me@me.me&#39;)>>> a.name... &#39;me&#39;>>> a.email... &#39;me@me.me&#39;
ログイン後にコピー

self.__name 保护私有特性

class Person():
    def __init__(self, name):
        self.__name = name
a = Person(&#39;me&#39;)>>> a.name... AttributeError: &#39;Person&#39; object has no attribute &#39;__name&#39;# 小技巧a._Person__name
ログイン後にコピー

实例方法( instance method )

实例方法,以self作为第一个参数,当它被调用时,Python会把调用该方法的的对象作为self参数传入。

class A():
    count = 2
    def __init__(self): # 这就是一个实例方法
        A.count += 1
ログイン後にコピー

类方法 @classmethod

class A():
    count = 2
    def __init__(self):
        A.count += 1    @classmethod
    def hello(h):
        print("hello",h.count)
ログイン後にコピー

注意,使用h.count(类特征),而不是self.count(对象特征)。

静态方法 @staticmethod

class A():    @staticmethod
    def hello():
        print("hello, staticmethod")
>>> A.hello()
ログイン後にコピー

创建即用,优雅不失风格。

特殊方法(sqecial method)

一个普通方法:

class word():
    def __init__(self, text):
        self.text = text
    def equals(self, word2): #注意
        return self.text.lower() == word2.text.lower()
a1 = word(&#39;aa&#39;)
a2 = word(&#39;AA&#39;)
a3 = word(&#39;33&#39;)
a1.equals(a2)
# True
ログイン後にコピー

使用特殊方法:

class word():
    def __init__(self, text):
        self.text = text    def __eq__(self, word2): #注意,使用__eq__
        return self.text.lower() == word2.text.lower()
a1 = word(&#39;aa&#39;)
a2 = word(&#39;AA&#39;)
a3 = word(&#39;33&#39;)
a1 == a2# True
ログイン後にコピー

# True

其他还有:

*方法名*                        *使用*
__eq__(self, other)            self == other
__ne__(self, other)            self != other
__lt__(self, other)            self < other
__gt__(self, other)            self > other
__le__(self, other)            self <= other
__ge__(self, other)            self >= other

__add__(self, other)        self + other
__sub__(self, other)        self - other
__mul__(self, other)        self * other
__floordiv__(self, other)    self // other
__truediv__(self, other)        self / other
__mod__(self, other)        self % other
__pow__(self, other)        self ** other

__str__(self)                str(self)
__repr__(self)                repr(self)
__len__(self)                len(self)
ログイン後にコピー

文本字符串

&#39;%-10d | %-10f | %10s | %10x&#39; % ( 1, 1.2, &#39;ccc&#39;, 0xf )
#
&#39;1          | 1.200000   |        ccc |         33&#39;
ログイン後にコピー

{} 和 .format

&#39;{} {} {}&#39;.format(11,22,33)
# 11 22 33
&#39;{2:2d} {0:-10d} {1:10d}&#39;.format(11,22,33)
# :后面是格式标识符
# 33 11 22

&#39;{a} {b} {c}&#39;.format(a=11,b=22,c=33)
ログイン後にコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

Debian Readdirが他のツールと統合する方法 Debian Readdirが他のツールと統合する方法 Apr 13, 2025 am 09:42 AM

DebianシステムのReadDir関数は、ディレクトリコンテンツの読み取りに使用されるシステムコールであり、Cプログラミングでよく使用されます。この記事では、ReadDirを他のツールと統合して機能を強化する方法について説明します。方法1:C言語プログラムを最初にパイプラインと組み合わせて、cプログラムを作成してreaddir関数を呼び出して結果をinclude#include#include inctargc、char*argv []){dir*dir; structdireant*entry; if(argc!= 2){(argc!= 2){

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

debian opensslでHTTPSサーバーを構成する方法 debian opensslでHTTPSサーバーを構成する方法 Apr 13, 2025 am 11:03 AM

DebianシステムでHTTPSサーバーの構成には、必要なソフトウェアのインストール、SSL証明書の生成、SSL証明書を使用するWebサーバー(ApacheやNginxなど)の構成など、いくつかのステップが含まれます。 Apachewebサーバーを使用していると仮定して、基本的なガイドです。 1.最初に必要なソフトウェアをインストールし、システムが最新であることを確認し、ApacheとOpenSSL:sudoaptupdatesudoaptupgraysudoaptinstaをインストールしてください

DebianのGitlabのプラグイン開発ガイド DebianのGitlabのプラグイン開発ガイド Apr 13, 2025 am 08:24 AM

DebianでGitLabプラグインを開発するには、特定の手順と知識が必要です。このプロセスを始めるのに役立つ基本的なガイドを以下に示します。最初にgitlabをインストールすると、debianシステムにgitlabをインストールする必要があります。 GitLabの公式インストールマニュアルを参照できます。 API統合を実行する前に、APIアクセストークンを取得すると、GitLabのAPIアクセストークンを最初に取得する必要があります。 gitlabダッシュボードを開き、ユーザー設定で「アクセストーケン」オプションを見つけ、新しいアクセストークンを生成します。生成されます

Apacheとは何ですか Apacheとは何ですか Apr 13, 2025 pm 12:06 PM

アパッチはインターネットの背後にあるヒーローです。それはWebサーバーであるだけでなく、膨大なトラフィックをサポートし、動的なコンテンツを提供する強力なプラットフォームでもあります。モジュラー設計を通じて非常に高い柔軟性を提供し、必要に応じてさまざまな機能を拡張できるようにします。ただし、モジュール性は、慎重な管理を必要とする構成とパフォーマンスの課題も提示します。 Apacheは、高度にカスタマイズ可能で複雑なニーズを満たす必要があるサーバーシナリオに適しています。

Apacheはどの言語に書かれていますか? Apacheはどの言語に書かれていますか? Apr 13, 2025 pm 12:42 PM

ApacheはCで書かれています。言語は、速度、安定性、移植性、直接ハードウェアアクセスを提供し、Webサーバーの開発に最適です。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

See all articles