機能ベース
1.機能理解
関数は準備されたコードの束です。必要に応じてこのコードの束を呼び出します
2.関数の定義
def関数名(パラメーター):
関数本体
3.関数の戻り値
戻り値とyieldを使用して戻ります。戻り値がない場合、デフォルトの戻り値はNoneです
。return:返されるものが返されるものです。通常の状況では、関数はreturnを実行します。焦点は
yield:what返されるのはジェネレーターオブジェクトです。クローラーフレームワークを学習するときに使用される複数の
ジェネレーターの呼び出しメソッド:1。next
();を
使用します。2。for... inループを使用します。
4.関数呼び出し
関数名(実際のパラメーター)は
、最も基本的な関数の定義と呼び出しの良いデモンストレーションです。
def make_love(a,b):
print(f'{a}和{b}陷入了爱河')
make_love('小明','小花')# '小明和小花陷入了爱河'
# 这是没有返回值的,用一个变量去接它,再打印显示的是None
b = make_love(1,2)# 注意赋值的时候,函数就调用了,所以会打印'1和2陷入了爱河'
# 而打印b时就只会打印返回值
print(b) # None
# 要是上面的不好理解,就看这个
def mysum(a,b):
print(a+22)
return a+b
s = mysum(1,2) # 23
print(s)# 3
5.ローカル変数とグローバル変数
グローバル変数:関数の外部で定義された変数はpyファイル全体でアクセスできることを理解できます;
ローカル変数:関数で定義された変数は関数内でのみ使用できます;
注:ローカル変数とグローバル変数に同じ名前の
場合、グローバル変数を変更する代わりに、関数内に新しいローカル変数を定義します。関数内のグローバル変数を変更する場合は、グローバルを使用して変数を宣言すると、グローバル変数の値を変更できます。関数を介して;
組み込み関数globals()、locals()はグローバル変数とローカル変数を表示できます
a = 100
word = '你好
def test():
x = 'hello'
print('x = {}'.format(x))
a = 10
print('函数内部a = {}'.format(a))
global word
word = 'ok'
test()# x = hello
# 函数内部a = 10
# 打印函数内定义的变量,会报错
# print(x) # NameError: name 'x' is not defined
print('函数外部a = {}'.format(a))# 函数外部a = 100 这里a的值没有改变
print('函数外部word = {}'.format(word))# 函数外部word = ok 这里word的值改变了
# print('locals={},globals={}'.format(locals(), globals()))
6.デフォルトパラメータの使用
def say_hello(a, b, c='湖南'):
print('我叫{},我今年{}岁,我来自{}'.format(a, b, c))
say_hello('张三', 18) # 没有传递参数,就使用默认值湖南
say_hello('张三', 18, '湖北') # 传递了参数,就使用传递的实参
7.可変パラメータ
* argsは可変位置パラメーター、=なしの位置パラメーターを意味します。** kwargsは可変キーワードパラメーター、=付きキーワードパラメーターを意味します。argsおよびkwargsは他の変数名に置き換えることができますが
、関数を呼び出すときにコードを変更しないことをお勧めします。パスパラメータ:
追加の位置パラメータはタプルの形式でargsに格納され、
追加のキーワードパラメータは辞書の形式でkwargsに格納されます。
def my_add(a, b, *args, **kwargs):
print('a={},b={},c={},kwargs={}'.format(a, b, args, kwargs))
c = a + b
for arg in args:
c += arg
return c
x = my_add(1, 2, x=1)# a=1,b=2,c=(),kwargs={'x': 1}
print(x)# 3
y = my_add(1, 3, 2, x=1, y=2)# a=1,b=3,c=(2,),kwargs={'x': 1, 'y': 2}
print(y)# 6
z = my_add(2, 2, 3, 4) # a=2,b=2,c=(3, 4),kwargs={}
print(z)# 11
8.匿名関数の使用
キーワードdefを使用して関数を定義することに加えて、ラムダ式を使用して関数を定義することもできます。
単純な関数を表すために使用され、関数が呼び出される回数は少なく、基本的に1回だけ呼び出され
ます。匿名関数を呼び出す:
1。名前を定義する(めったに使用されない)
2。この関数をパラメーターとして別の関数に渡す(より多くのシナリオで使用される)
辞書リストを並べ替えるときに使用する
1.フィルタークラス
filterは、反復可能なオブジェクトをフィルタリングし、フィルターオブジェクトを取得します
。Python2は組み込み関数であり、Python3は組み込みクラスに変更されます。
フィルターには、2つのパラメーターを指定できます。最初のパラメーターは関数で、2番目のパラメーターは関数です。は
反復可能オブジェクトです。fliterの結果はフィルタータイプのオブジェクトであり、フィルターオブジェクトも反復可能オブジェクトです。
ages = [21, 12, 35, 14, 24, 26]
x = filter(lambda age: age > 18, ages)
print(x) # <filter object at 0x0000000001DC8AC8>
print(list(x))# [21, 35, 24, 26]
for i in x:
print(i,end=' ')# 21 35 24 26
print()# 用来换下行
adults = list(x)
print(adults)# []
print(list(filter(lambda x:x%2,range(10))))# [1, 3, 5, 7, 9]
2.マップクラス
mapの機能は、反復可能オブジェクト内のすべてのデータに関数内の操作を実行させることです。その結果
、マップオブジェクトが作成され、マップオブジェクト上で反復することもできます。反復後、マップオブジェクトは空になります。
ages = [12, 30, 11, 21, 14, 15]
x = map(lambda age: age * 2, ages)
print(x)# <map object at 0x00000000005B2400>
print(list(x))# [24, 60, 22, 42, 28, 30]
for i in x:
print(i)
print(list(x))# []
9.関数の入れ子(理解のため、あまり使用されていません)
クロージャ:内部関数で、外部スコープ(グローバルスコープではない)の変数が参照される場合、内部関数はクロージャと見なされます
def outer():
m = 10
def inner():
nonlocal m # 用这个可以一修改外部局部变量
m += 1
print(m)
return inner
f = outer()
f()# 11
# 这个f就相当于是inner函数,在调用inner的时候,
# m相对于inner函数就是一个全局变量是不会被释放的
# 注意是相对的,你在外面直接打印m也是不行的
# 用处就是防止m被外部污染(以防被改变)
f()# 12
f()# 13
f()# 14
#但如果你是直接使用外部函数调用内部函数,m用完就释放了
outer()()# 11
outer()()# 11
outer()()# 11
10.デコレータの使用
import time
def cal_time(fn):
print('fn={}'.format(fn))
def inner():
start=time.time()
fn()
end=time.time()
print(end - start)
return inner
@cal_time # 第一件事是调用cal_time;第二件事是把被装饰的函数传递给fn
def jjj():
x = 0
for i in range(1, 100000000):
x += i
print(x)
# 第三件事:当再次调用jjj函数时,现在的jjj函数已经不再是上面的jjj函数,而是上面的内部函数inner
# print(jjj)
jjj()
# fn=<function jjj at 0x00000261AEEC0708>
# 4999999950000000
# 5.602903842926025
def factor(fn):
def inner(x,y,*args,**kwargs):
a=kwargs.get('clock',23)
if a<23:
fn(x,y)
else:
print('太晚了睡觉吧')
return inner
@factor
def play_game(name,game):
print('{}正在玩{}'.format(name,game))
# 注意这里给play_game函数传参的时候其实是给inner函数传参
play_game('张三','王者荣耀',d=12,c=13)
play_game('张三','王者荣耀',d=12,c=13,clock=21)
組み込み関数の概要
完全ではありませんが、最初に多くをマスターします
関数名 | 効果 |
---|---|
すべて | すべてがTrueの場合にのみ、すべての要素をブール値に変換します。それ以外の場合はFalseです。 |
どれか | すべての要素をブール値に変換します。1つはTrueがTrue、すべてがFalseがFalseです。 |
置き場 | 数値を2進数に変換する |
10月 | 数値を8進数に変換する |
16進数 | 数値を16進数に変換する |
chr | 文字エンコーディングを対応する文字に変換する |
言葉 | 対応する文字を文字エンコードに変換します |
あなたへ | オブジェクトのすべてのプロパティとメソッドを一覧表示できます |
divmod | 2つの数の除算の商と剰余を見つけます |
eval | 文字列でPythonコードを実行する |
出口 | 指定された終了コードでプログラムを終了します |
グローバル | すべてのグローバル変数を表示するために使用されます |
地元の人 | すべてのローカル変数を表示するために使用されます |
助けて | ヘルプドキュメントを表示するために使用されます |
id | データのメモリアドレスを取得する |
isinstance | オブジェクトがクラスによって作成されているかどうかを判別する |
issubclass | クラスが別のクラスのサブクラスであるかどうかを判別する |
len | 長さを取得します |
iter | 反復可能なオブジェクトのイテレータを取得する |
次 | for ... inループは、基本的にイテレータの次のメソッドを呼び出しています。 |
最大 | 最大数を見つける |
分 | 最小の数を見つける |
開いた | ファイルを開くために使用されます |
捕虜 | 数のn乗を見つける |
円形 | 指定した小数点以下を四捨五入します |
和 | 合計に使用 |
注意
関数に同じ名前を付けることはできません。同じ名前の後の関数は前の関数を上書きします