ホームページ >バックエンド開発 >Python チュートリアル >Pythonで関数の一部を解析してみる

Pythonで関数の一部を解析してみる

不言
不言転載
2018-09-28 14:10:152225ブラウズ

この記事の内容は Python のいくつかの関数の分析に関するものであり、一定の参考価値があります。必要な友人が参照することができます。お役に立てれば幸いです。

Python では、変数には型がありません。変数はオブジェクトへの参照であり、型はオブジェクトに属します。
変数は本質的にはプレースホルダーです。変数には通常、小文字で名前が付けられます。

1: 構文

def 関数名 (パラメーター リスト):
関数本体
(関数名は通常、小文字、単一の下線、数字などの組み合わせを使用します)

2: よく使用される関数の種類

(1) パラメーターを持つ関数: パラメーターは正しい順序で関数に渡される必要があります

(2) デフォルトのパラメーター関数: Ifパラメータが渡されない場合は、デフォルトのパラメータが使用されます。デフォルトのパラメータが最後にない場合は、エラーが報告されます。

(3) キーワード パラメーター: 関数呼び出しでは、キーワード パラメーターを使用して、渡されたパラメーター値を決定します。

(4) 不定長のパラメーター: 関数は、最初に宣言されたときよりも多くのパラメーターを処理できます。

①*args のすべての変数は、すべての名前のない変数を格納するタプルにパックされます。
②**args のすべての変数は、辞書にパックされます。

( 5) 関数を宣言するとき、パラメータ内のアスタリスク * は単独で使用でき、* の後のパラメータはキーワードとともに渡す必要があります

(6) 匿名関数、ラムダ関数を使用して匿名関数を作成します

①lambda は単なる式であり、関数本体は def よりもはるかに単純です
②ラムダの本体はコード ブロックではなく式です
③関数には独自の名前空間があり、独自のパラメーター リストの外部やパラメーターにアクセスすることはできません。グローバル名前空間。

3: Python 関数のパラメータの受け渡し:

不変型:

C に似た値の受け渡し (int、string、tuple など)。
fun(a) のように、a の値のみが渡され、a オブジェクト自体には影響しません。
たとえば、 a inside fun (a) の値を変更すると、コピーされた別のオブジェクトのみが変更され、 a 自体には影響しません。

変数の型:

c 参照転送と同様、次のようなリストや辞書として。たとえば、実際には fun (la) に la が渡されますが、変更後は fun の外側の la にも影響が及びます、不変オブジェクトの受け渡しと可変オブジェクトの受け渡しと言うべきです

4: 変数スコープ

Python には一般に 4 種類のスコープがあります。

L (ローカル) ローカル スコープ ドメイン

E (囲み) クロージャ関数の外側の関数内

G (グローバル) グローバル スコープ
B (組み込み) 組み込みスコープ

検索ルールは L->gt ;E->G->B

Python ではモジュール、クラス、関数のみ(def, lambda) は新しいスコープを導入します。他のコード ブロック (if/elif/else/、try/excel、for/while など) は新しいスコープを導入しません。つまり、これらのステートメントで定義された変数は、外部からもアクセス可能です。

5: グローバル変数とローカル変数

関数内で定義された変数にはローカル スコープがあり、関数の外で定義された変数にはグローバル スコープがあります。

内部スコープが外部スコープの変数を変更する場合は、グローバル キーワードと非ローカル キーワードが使用されます。

(1) グローバルは、グローバル変数の値を変更するために使用されます。

(2) 非ローカルは、ネストされたスコープ (外側のスコープ、外側の非グローバル スコープ) 内の変数を変更するために必要です。キーワードは

6: 関数呼び出しのヒント (重要)

関数名.__doc__関数のヘルプ ドキュメントを取得する

関数名は別の関数の参照として使用できます。関数の仮パラメータ

複数の戻り値はタプルの形式で返されます

内部関数、グローバル変数は変更せずにアクセスできます。 !

内部関数。グローバル変数を同じ名前で変更すると、Python はそれがローカル変数であると認識します。 !

七: 命名について

(1) ファイル名: すべて小文字、アンダースコアも使用可能

(2) 関数名: 小文字、小さいキャメルケース原則

(3) 変数名: すべて小文字、アンダースコアで接続

詳細な命名規則については、PEP8

8: いくつかの特別な関数を参照してください

map

red
フィルター

# --------------------------------------------------------------------------#
# 函数的语法及调用
# --------------------------------------------------------------------------#


def func(func_name, number):        # 函数的定义
    """打印输入的任何字符串"""
    print(func_name, number)
    return 'Done'


func('func_1', 'faith')             # 函数的调用

# --------------------------------------------------------------------------#
# 不定长参数函数,封装成元组
# --------------------------------------------------------------------------#


def func_1(func_name, *number):
    """
    打印输入的任何字符串
    """
    print(type(number))
    print(func_name, number)
    return 'Done'


func_1('func_1', 1, 2, 2, 3)


def func_2(func_name, number):   #
    print(type(number))
    print(func_name, number)
    return 'Done'


func_2('func_2', (1, 2, 2, 3))


def func_3(func_name, *number):
    print(func_name)
    print(number[3])            # 根据元组index中一部分变量
    print(number[4])
    return 'Done'


func_3('func_3', 1, 2, 2, 3, 'aaa', 'abc')


# get out question: the number of index isn't known in most case!
# --------------------------------------------------------------------------#
# 不定长参数函数,封装成字典
# --------------------------------------------------------------------------#


def func_4(func_name, **number):  # 可变参数必须在函数参数的最后
    # print(type(number))
    print(func_name, number)
    return 'Done'


func_4('func_4', name='faith')

# --------------------------------------------------------------------------#
# 命名关键字函数
# --------------------------------------------------------------------------#


def func_5(a, x, c, *, china, uk):
    print('func_5:', china, uk)
    print(a, x, c)


func_5(1, 2, 3, china='bJ', uk='rs')    # 调用时必须加上关键字
# func_5(1, 2, 3, 'bJ', 'rs')

# --------------------------------------------------------------------------#
# 函数应用之-递归
# --------------------------------------------------------------------------#


def my_sum(i):
    if i < 0:
        raise ValueError    # 抛出错误
    elif i <= 1:
        return i
    else:
        return i + my_sum(i - 1)


print(my_sum(1.4))

# --------------------------------------------------------------------------#
# 传递不可变对象实例
# --------------------------------------------------------------------------#


def change_int(a):
    a = 10


b = 2
change_int(b)
print(b)         # 结果是2
# --------------------------------------------------------------------------#
# 传递可变对象实例
# --------------------------------------------------------------------------#


def change_me(mylist):
    mylist.append([1, 2, 3, 4])
    print("函数内取值: ", mylist)
    return


myList = [10, 20, 30]
change_me(myList)
print("函数外取值: ", myList)

# --------------------------------------------------------------------------#
# 函数内修改全局变量的值
# --------------------------------------------------------------------------#

money = 200  # 模块里面的全局变量


def add_money():
    global money
    money = money + 1
    return money


print("修改后的值money = ", add_money())


# --------------------------------------------------------------------------#
# 匿名函数
# --------------------------------------------------------------------------#
sum_1 = lambda arg1, arg2: arg1 + arg2

# 调用sum函数
print("相加后的值为 : ", sum_1(10, 20))
print("相加后的值为 : ", sum_1(20, 20))

# 单独编译一个文件时候输出结果
if __name__ == "__main__":
    pass

以上がPythonで関数の一部を解析してみるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。