Pythonのカスタム関数(関数型、DEF、範囲、再放送)

A、PyCharm基本設定

図1は、マウスホイールのCtrl +と - フォントまたはズームアウト

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

ズーム検索

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

2、Windowsのエクスプローラでファイルまたはディレクトリを開きます

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

キーマップ検索

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

設けられたボタンは、F3のように、使用されません。

3、コードヒント

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

検索文字

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

第二に、カスタム関数

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

1.なぜ、利用機能

ファンクションコード書き込みの多くを実行し、一度、
関数は、コードの冗長性を削減し、コードの再利用を可能にします。

組織機能が良い、再利用可能であり、コードセグメントは、単一の、または関連する機能を実装するために使用されます。

アプリケーションの機能モジュールが向上し、コードの再利用することができます。あなたはすでにPythonが提供していることを知っている多くのビルトインな印刷などの機能、()。しかし、あなたはまた、ユーザー定義関数と呼ばれ、独自の関数を作成することができます。

私は、このような需要があるとします。

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

しかし、私はまだあまりにも多くの問題を感じ、あなたはすべての回で食べたいたびに、この手順を繰り返します。この時点で、私はそのようなマシンを持っていると思ってい:

  Pythonのカスタム関数(関数型、DEF、範囲、再放送)

反復作業パッケージ一緒に、私たちはマシンに何かを入れて、あなたは私たちが欲しいものを得ることができます。

これは、いわゆるコードの再利用です。

# 定义方法
def print_nums():
    """此处是函数功能的描述"""
    for i in range(1,11):
        print(i,end=" ")

# 1.三角形 2.正方形 3.梯形
key = int(input('请输入要打印的图形:'))
if key == 1:
    # 打印三角形的代码
    print_nums()
    pass
elif key == 2:
    # 打印梯形的代码
    pass
elif key == 3:
    # 正方形的代码
    pass
出力:
请输入要打印的图形:1
1 2 3 4 5 6 7 8 9 10 
进程已结束,退出代码 0

分析します

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

Pythonのカスタム関数(関数型、DEF、範囲、再放送)

2.定義関数

あなたは、次の簡単なルール、独自の関数で関数を定義することもできます。

キーワード:DEF

ファンクションブロックは、デフキーワード始まり、コロンで終わり、名前と機能識別子括弧()が続きます。

関数の最初の行を意味し、通常のライトノート、関数テーブルの名前

注空白行の後、コードブロック、コードライブラリインデントを書き込むようになりました

すべての受信パラメータと引数は括弧の中央に配置する必要があります。括弧の間でパラメータを定義するために使用することができます。

最初の文関数は、選択的に説明文字列を使用することができます - 機能命令を格納するため。

機能の内容コロン、およびインデントを開始します。

リターン[式]エンド機能は、選択的に呼び出し元に値を返します。リターンなしと同等の表現せずにリターン。

関数の後に、2行を空

1つの空の関数呼び出し後の行、およびその他の規範のその後の実装

文法

#代码如下
def functionname( parameters ):
  "函数_文档字符串"
  function_suite
  return [expression]

デフォルトでは、パラメータ名とパラメータ値を宣言マッチアップのための関数として定義されます。

第三に、関数型

Pythonの関数の引数の型を使用することができます。

必須パラメータ
名前付きパラメータ
のデフォルトパラメータを
可変長パラメータ

  • パラメータタイプ:

  • 図1に示すように、位置パラメータ:位置パラメータ(シーケンス)が重要であり、パラメータ及び引数の数が一致するように整形します
  • 2、キーワード引数:位置パラメータのない非常に厳しい要件
  • 3、パラメータのデフォルト値:
  • デフォルトパラメータ値を引数に指定されている場合(1)引数に対応するパラメータを提供しないかもしれ
  • デフォルトのパラメータ値が指定されている場合(2)は、summaryパラメータ引数の送信後、パラメータは、最終的に渡される引数を勝ちます
  • 4、可変長パラメータ:
  • (1)*:送信された単一の値を受信し、格納されたタプル
  • (2)** B:フォームの重要なパラメータを受信し、辞書形式のために保存

    1、無関数パラメータ

参照機能を実装しないと呼び出し番号:

# 定义无参函数
def say_hi():
    """介绍自己的函数"""

    print('我是xgp,今年18岁,年收入xxxx元')

# 调用无参函数
say_hi()
出力:
我是xgp,今年18岁,年收入xxxx元

进程已结束,退出代码 0

2、パラメータ化機能

ここでは、関数の引数について話をします:

  • パラメータ:だけと呼ばれるように、メモリユニットパラメータユニットを割り当てるときには、仮パラメータを参照し、仮想メモリ空​​間を取ることはありません
  • 引数:実際のパラメータを参照、変数、メモリ空間を占有、一方向データ転送を、渡されたパラメータ、引数、パラメータであり、引数が通過することができません

# 定义带参函数:形参(形式参数,模板)
def say_hi(name,age,money):
    """介绍自己的函数"""

    print('我是'+name+',今年'+str(age)+'岁,年收入'+str(money)+'元。')

# 调用带参函数:实参(实际传递的参数)
say_hi('xgp',20,20000)
出力:
我是xgp,今年20岁,年收入20000元。

进程已结束,退出代码 0

注:関数を呼び出すときに、引数の数が渡された
一貫性の仮パラメータに|

(1)位置パラメータ

上記の例から分かるように、交換位置、xとyが呼び出される場合は、パラメータと1:1の形で実際のパラメータは、以下のように、位置を交換します。

def test(x,y):
    print(x)
    print(y)
print("--------互换前-----")
test(1,2)
print("--------互换后-----")
test(2,1)

#输出
--------互换前-----
1
2
--------互换后-----
2
1

Xの定義、Y二つのパラメータので、引数を渡すときに、2つだけの引数、1つの以上の以下の問題を通過することです。

:マルチ転送パラメータ

def test(x,y):
    print(x)
    print(y)
print("--------多一个参数----")
test(1,2,3)

#输出
--------多一个参数----
Traceback (most recent call last):
  File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>
    test(1,2,3)
TypeError: test() takes 2 positional arguments but 3 were given  #test()函数需要传两个实参,你传了三个实参

B:少なくとも一つの引数が渡されました

def test(x,y):
    print(x)
    print(y)
print("--------少一个参数----")
test(1)

#输出
--------少一个参数----
Traceback (most recent call last):
  File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>
    test(1)
TypeError: test() missing 1 required positional argument: 'y'  
#没有给y参数传实参

(2)キーワード引数

位置パラメータ以上、ビット死者に見えますが、それ以外の場合は、間違ったパラメータを渡します、位置対応の正式なと実際のパラメータである必要があり、この問題を回避するために、主要パラメータの遊びがあります。キーワードは、パラメータを渡す必要がないが、一から一は、あなただけの引数を呼び出すことができ、あなたのパラメータのかを指定する必要があります。

def test(x,y):
    print(x)
    print(y)

print("--------互换前------")
test(x=1,y=2)
print("--------互换后------")
test(y=2,x=1)

#输出
--------互换前------
1
2
--------互换后------
1
2

3、デフォルトパラメータ

着信パラメータがデフォルトと見なされていない場合、関数は、デフォルト値、と呼ばれています。通常の印刷の下にデフォルトの年齢は、年齢が渡されない場合:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print "Name: ", name
   print "Age ", age
   return

#调用printinfo函数
printinfo( age=50, name="miki" )
printinfo( name="miki" )
出力:
Name:  miki
Age  50
Name:  miki
Age  35

4、可変長パラメータ

あなたは、元の文よりも多くのパラメータを扱うことができる機能が必要な場合があります。これらのパラメータは、宣言を命名しない、可変長パラメータ、および異なる2種類のパラメータと呼ばれます。次のように基本的な構文は次のとおりです。

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

* アスタリスク(追加しました)変数名を格納するすべての変数の無名のパラメータが。可変長パラメータの例として、次のように:**

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print "输出: "
   print arg1
   for var in vartuple:
      print var
   return

# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )
出力:
输出:
10
输出:
70
60
50

(1)実施例

# 不定长参数的类型
def no_test(*args,**b):
    print((args))
    print(b)
no_test(1,2,3)
no_test(name='test',ages=18)
出力:
(1, 2, 3)
{}
()
{'name': 'test', 'ages': 18}

5、無名関数

匿名関数を作成するために、ラムダを使用してのpython。

  • ただ、ラムダ式、関数本体はDEFよりもはるかに簡単です。
  • ラムダ式は、代わりにコードブロックの本体です。私たちは、ラムダ式に限定されたロジックをパッケージ化することができます。
  • ラムダ関数は、独自の名前空間を持ち、独自の引数リストやグローバル名前空間のパラメータの外側にアクセスすることはできません。
  • ラムダ関数のルックスは、単一の行を書きますが、作業効率を高めるために小さな関数を呼び出すときに目的がスタックメモリを占有していないCまたはC ++インライン関数に相当することはできませんが。

文法

次のようにラムダ関数の構文は、一つだけのステートメントが含まれています。

lambda [arg1 [,arg2,.....argn]]:expression

例を以下に示します。

相加后的值为 :  30
相加后的值为 :  40

フォー、データ転送リストの種類を再実行します

機能を終了するreturn文[式]は、発信者への選択式を返します。無パラメータ値を持つreturn文はNoneを返します。以前の例では、値を返す方法を示していない、次の例では、それを行う方法を紹介します。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print "函数内 : ", total
   return total

# 调用sum函数
total = sum( 10, 20 )
出力:
函数内 :  30

注:関数内でreturn文を書かないと、デフォルトでは空のオブジェクトを返すことです。それがあることを、私は書いていない場合でも、内部のpythonも取引を行って。

  このとき、何人かの人々は、関数の戻り値の出力との違いを見分けることはできません。

  実行環境の機能が独立しているが、コードが有効であるものの、のでいわば、そのようなコンテンツの操作で印刷機能では、出力することができます。外部からの操作を行うことができ、機能が内部であってもよいです。すべての機能は、出力の実装後にそれほど明白ではない。しかし、我々は関数が成功するかどうかを確認する必要がある、または私はそれにご飯を入れていることを、あなたはいつも私にラウンド演算後の食事を取る。さあ。

  これは、関数の戻り値の意味です。これは、オブジェクトを返します。このオブジェクトは、実行状態の記述であってもよく、又は処理等の結果であり得ます。

1、return文は、単純型を返します。

def test():
    return 'hello'
print(test())

# return 语句返回字典
def show_info(name,age):
    person = {'name':name,'age':age}
    return person

print(show_info('test',18))
出力:
{'name': 'test', 'age': 18}

进程已结束,退出代码 0

2、ユーザグリーティング

def say_hi(first_name,last_name):
    """返回完整名字"""
    full_name = first_name + ' ' + last_name
    return full_name

while True:
    print('请输入您的姓名:')
    f_name = input('姓:')
    if f_name =='q':
        break

    l_name = input('名:')
    if l_name == 'q':
        break
        # 调用函数
    format_name = say_hi(f_name,l_name)
    print('hello'+format_name+'!')
出力:
请输入您的姓名:
姓:x
名:gp
hellox gp!

3、データ転送リストのタイプ

def test(names):
    for name in names:
        print(name)
user_name = ['sdf','fsd','fewfwef','fwefe']
test(user_name)
出力:
sdf
fsd
fewfwef
fwefe

进程已结束,退出代码 0

5、練習機能

  1. 一つだけの関数呼び出しの変数は、この変数は、次のような一連の出力端の算術平均値である場合range(5)
  2. 2つの変数を与えられたとき、出力として、始点と終点を参照し,,range(2, 5)
  3. 三つの変数が与えられたとき、変数の時間に基づいてなど、最初の3つの出力ステップを指しrange(2, 5, -1)

(我々はこの関数を呼び出すときは、必ずその整数または浮動小数点を想定)

参考として以下の私のアイデアを与えて、この機能を達成するためにどのように分析します

  • 三つのパラメータの合計が明らかにされている必要があります。
  • 最も直感的な感覚は、開始値は0から開始、開始する場所を指定しない場合、デフォルト値を持つことであるということです。
  • 指定されていない場合、ステップサイズが1ステップは、デフォルト値を持つことです。
  • 原則の背後に配置されるパラメータのデフォルト値は、最も自然な設計パラメータを持つようによるとrange_custom(stop, start=0, step=1)
  • このプログラムは、実行可能なように見えますが、ちょうど2つの後ろの要件を満たしていない、我々はと呼ばれる2つの変数を使用している場合ので、開始点と終了点が逆になっています。
  • 初期値でスタート、その後、私たちは一つだけ引数を与え呼び出すことを、停止するには、この時間は終わりであればスタートは説明が少なくとも二つのパラメータは、この時間を与えられた再割り当てされた場合、我々は、それに判決を追加しますストップの値とそれについての交換を開始します。
  • 今、この機能は、ほとんどの状況で満足のようですが、与えられたパラメータ値0の開始までの時間がそれを行う方法で与えられた場合にはバグが、ありますか?range_custom(-5, 0)現在のルールの下に翻訳されますrange(0, -5)が、私たちの目的はrange(-5, 0)
  • したがって、開始の初期値は、何か他のものではありませんが、デジタルデータの種類は、利便性のために、我々はに割り当てられた初期値を呼び出しNone、私たちのプログラムのテンプレートが出てきました。
def range_custom(stop, start=None, step=1):
    if start is None:
        return range(stop)
    return range(stop, start, step)

今、このプログラムは、当社の要件を満たしているが、非常に快適に見ていない、変更することができます

def range_custom(start, stop=None, step=1):
    if stop is None:
        return range(start)
    return range(start, stop, step)

今より良いロジックのいくつかを理解するために、この関数のパラメータは、我々は基本的に要件を満たしていることを言うことができます。もちろん、本実施形態では、だけでなくレンジ機能を実現するために、問題のオーダーパラメータを説明するために。実際、Pythonはまた、我々はそれに触れるために別の機会を持つべきである背面にレンジ機能パラメータのインスタンス化、発電機などの知識を含んでいます。

オプションのパラメータ

それは、オプションのパラメータになると、一部の人が見てきたが、彼らはそれがこの発生のような一般的で、それが何を意味するのか最終的には理解していません

def func_option(*args):
    return args

* 私たちは、時間の関数を宣言することに注意が`パラメータ名の前に追加オプションのパラメータの宣言方法である`アスタリスクを。その後の使用は、それが何であるかを最終的にオプションのパラメータ?**

オプションのパラメータは、すべての余分な変数が収集されていることタプルの役割である、タプルの名前は、オプションのパラメータ名です。上記の例ではfunc_option、我々のような、任意の数の変数でそれを呼び出すことができa = func_option(1, 2, 3)、それはaタプルだろう(1, 2, 3)なぜリストの代わりにタプルに、我々は上にあるPythonの高度な-シンプルなデータ構造が述べたように、タプルはしばしば、よりPythonで使用され、優先データ構造のリストよりも、特定の理由から、この記事の後にすることにより、詳細な自己定義された関数のパラメータのセクションについて説明します。

私達はちょうどのオプションのパラメータは、余分な変数を収集すると発表しました。私はその理由のためにこれを言います。

>>> def func_option(a, *args, c=2):
...     return args
...
>>> func_option2(1)
()
>>> func_option2(1, 2)
(2,)
>>> func_option2(1, 2, 3)
(2, 3)

* 気づいた私たちの`最初の変数のパラメータはタプルに配置されているよりも、普通の他に付加価値をargs`。問題につながるそうすることであなたは、それだけで、これまでデフォルト値を使用することができ、与えられたパラメータ名を呼び出していない場合、我々は、パラメータのデフォルト値を持っていることです。そして、私たちは関数を呼び出した場合、エラーに直面するだろう、最終的なプログラムのデフォルトのパラメータ値を持ちません。**

>>> func_option2(c=1, 2, 3)
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument

この問題を回避するには良いの方法はありますか?私たちは、デフォルトのパラメータ値を持つオプションのパラメータの背面に配置しようとすることができます。

>>> def func_option3(a, c=2, *args):
...     return args
...
>>> func_option3(1)
()
>>> func_option3(1, 2)
()
>>> func_option3(1, 2, 3)
(3,)
>>> func_option2(c=1, 2, 3)
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument

だから、機能のこの形式は、その前に、問題を解決することはできません。それはないようですが、私たちは、変数への後方の位置にパラメータのデフォルト値を持つようにしようとする、時間の関数を呼び出して、知っています。だから、最後に、私たちの両方がどの方法が使用されますか?実際には、我々は、デフォルト値を持つパラメータの後にオプションのパラメータを置く傾向があるが、多くのパラメータならば、我々はすべての変数は、パラメータ名を追加するときに、関数を呼び出すする傾向があります。そして、実際には、実際には、オプションのパラメータがあまりでない使用、相対的に言って、実際には別の引数は、より興味深いものです。このオプションパラメータは次の形式で、一般的です

def func_optionkw(**kwargs):
    return args

この場合、キーワード辞書のパラメータ名に格納されたキーと値のペアとしてオプションのパラメータです。つまり、関数は一般的なパラメータは、変数は代入文の形で与えられるべきで満たした後に呼び出されたときに、値として右キーとして等号の左側。エラーを意志これを怠ります。

>>> func_optionkw(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: t2() takes 0 positional arguments but 1 was given

カスタム関数一つだけのオプションのパラメータは、だけでなく、キーワード引数まで持つことができることに留意すべきです。これは後のキーワードはオプションのパラメータの一般的なパラメータに配置する必要があります。

今、私たちは、関数のパラメータの順序の一般的なルールをまとめるために来ます。

  • 前面の一般的なパラメータ
  • 最終表面上のオプションのパラメータ
  • 一般的なオプションの引数の背面にあるオプションのキーワードパラメータ
  • 関数呼び出しの後方の位置に対応する可変パラメータのデフォルト値を持つようにしてください
  • 引数がより、関数が呼び出されている場合は、最高のすべての変数は、パラメータの名前を指定しました

これらは、関数が呼び出され、エラーを防ぐために、いくつかの、いくつかの関数定義ミスを防ぐために、短いで、良いプログラミング習慣を開発する必要があります。

第五に、変数のスコープ

プログラムのすべての変数は、任意の位置の缶のアクセスではありません。アクセスは、変数が割り当てられている場所によって異なります。

変数のスコープは、あなたがアクセス可能で、特定の変数名プログラムの一部を決定します。二つの基本的な変数のスコープは、以下のように:

  • グローバル変数
  • ローカル変数

第六に、グローバルとローカル変数

これは、ローカルスコープを有するものとして定義され、関数の外に定義された変数の関数内のグローバルスコープを有します。

ローカル変数は、そのアクセス関数内で宣言することができ、プログラム全体の範囲内でグローバル変数にアクセスすることができます。関数を呼び出すときに、関数名の中に宣言されたすべての変数がスコープに追加されます。例を以下に示します。

例(Pythonの2.0+)

#!/usr/bin/python
# -*- coding: UTF-8 -*-

total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2 # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total

#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total
出力:
函数内是局部变量 :  30
函数外是全局变量 :  0

おすすめ

転載: blog.51cto.com/14320361/2480581