Python 4日目勉強
5712 ワード
python関数基礎2019-05-18--張伯羽
1.変長パラメータ一つ*:パラメータを一つのグループに入れる 両方*:パラメータを1つの辞書に入れる パラメータ順:位置パラメータ->タプル->辞書 一つ*メタグループとリストを外すことができる 2個*辞書を外すことができる return戻り値
2.関数の参照問題
データは参照タイプに分けられ、通常タイプpythonの基本データ型はすべて通常タイプ、数、ブール型、文字列型それ以外のタイプはすべて参照タイプ普通タイプ賦値時伝のは値で、参照タイプ賦値時伝のはアドレスです
パラメータの本質は付与操作であり、参照タイプのデータが渡されている場合は、関数で変更されているかどうかに注意する必要があります.numbers[:]でコピー可能
3.関数の閉パッケージ関数名本質は関数のアドレスを表す 内層関数は外層関数の変数にアクセスできるが、修正できない 内層関数が変数にアクセスするときはまず自分から検索し、見つからない場合は上から検索する pythonにおける変数の役割ドメインは関数単位 global修飾変数の場合、最外層のグローバル変数を使用していることを説明 nolocalが変数を修飾する場合、ネスト層関数を用いた変数閉包の本質が関数ネスト関数であることを説明し、外層関数が内層関数のアドレスを返す
4.再帰
関数は自分で自分を呼び出して、再帰あるいは循環を編纂して一般的に出口(終わりの条件)の問題を先に考慮します階乗を求める質問 フィボナッチ数列1.再帰
2.サイクル高次関数、パラメータまたは戻り値は関数の関数 累積 累乗 map(func,inteable)
この関数はinteableのデータをfunc関数処理に順次渡し,最後に処理の結果を返す.reduce(func,interable)関数 累積操作ではfunc関数は2つのパラメータを受信する必要があります.reduceはfuncの実行結果を1つのパラメータとして、inteableからもう1つのデータを別のパラメータとして取り出します. filter(func,interable)
関数funcに基づいてinterableをフィルタリングし、interableのデータを関数funcに転送します.関数がTrueを返すと、そのデータは保持されます.そうしないと保持されません. sort(interablen, kry = none, reverse = False)
データをソートします.keyはソートのルールを指定します.値は関数で、reverseはソートの順序を指定します.->昇順または降順
1.変長パラメータ
def self_print(*a):
print(a)
print(type(a))
self_print(1,2,3,4,5,6)
(1, 2, 3, 4, 5, 6)
def d_self_print(**kwargs):
print(kwargs)
d_self_print(last_name=' ', first_name=' ')
{'last_name': ' ', 'first_name': ' '}
def mix(name, *t, **kw):
print(name)
print(t)
print(kw)
mix(' ', 20, 'dongqin', gender=' ')
(20, 'dongqin')
{'gender': ' '}
t = (1,2,3,4,5)
print(*t)
def f(*tt):
print(tt)
f(*[1,2,3,4,5])
1 2 3 4 5
(1, 2, 3, 4, 5)
def ff(**kwargs):
print(kwargs)
ff(**{'name':'zhang', 'age':20})
{'name': 'zhang', 'age': 20}
def sum_and_avg(*numbers):
total = sum(numbers)
avg_number = total/len(numbers)
return total, avg_number
sum, avg = sum_and_avg(1,2,3,4,5,6,7,8,9,10)
print(" %f" % sum)
print(" %f" % avg)
2.関数の参照問題
データは参照タイプに分けられ、通常タイプpythonの基本データ型はすべて通常タイプ、数、ブール型、文字列型それ以外のタイプはすべて参照タイプ普通タイプ賦値時伝のは値で、参照タイプ賦値時伝のはアドレスです
l1 = [1,2,3,4,5]
l2 = l1
#
l2[1] = 5
print(l1)
[1, 5, 3, 4, 5]
パラメータの本質は付与操作であり、参照タイプのデータが渡されている場合は、関数で変更されているかどうかに注意する必要があります.
def power(numbers):
# numbers = {x**2 for x in numbers}
numbers = numbers[:]
#
numbers = list(numbers)
#
numbers[3] = 10
return numbers
nums = [1,2,3,4,5,6]
print(power(nums))
print(nums)
[1, 2, 3, 10, 5, 6]
[1, 2, 3, 4, 5, 6]
3.関数の閉パッケージ
def fun():
print('Hello World!')
fx = fun()
fx
Hello World!
aa = 10
def outter():
aa = 10
def inner():
#
# global a
nonlocal aa
aa -= 1
print(aa)
print('hello inner')
return inner
fo = outter()
fo()
fo()
fo()
9
hello inner
8
hello inner
7
hello inner
4.再帰
関数は自分で自分を呼び出して、再帰あるいは循環を編纂して一般的に出口(終わりの条件)の問題を先に考慮します
def factorial(n):
res = 1
for num in range(1, n+1):
res *= num
return res
print(factorial(5))
120
#
def feibonaqi2(n):
if n==1 or n==2:
return 1
else:
return feibonaqi2(n-1) + feibonaqi2(n-2)
list = []
for i in range(1, num+1):
list.append(feibonaqi2(i))
print(list)
[1, 1, 2, 3, 5]
2.サイクル
# for
def feibonaqi3(n):
before = 0
after = 1
if n==1:
return 1
for i in range(2, n+1):
tmp = before + after
# before = after
# after = tmp
before, after = after, tmp
return tmp
list2 = []
for i in range(1, num+1):
list2.append(feibonaqi3(i))
print(list2)
[1, 1, 2, 3, 5]
def handle(func, *param):
return func(*param)
def my_sum(*param):
sum = 0
for i in range(len(param)):
sum += param[i]
return sum
print(my_sum(1,2,3,4,5))
#
print(handle(my_sum, 1, 2, 3, 4, 5))
15
15
print(handle(my_sum, 1, 2, 3, 4, 5))
def my_mul(*param):
"""
:param param:
:return:
"""
mul = 1
for v in param:
mul *= v
return mul
print(handle(my_mul, 1,2,3,4,5))
120
この関数はinteableのデータをfunc関数処理に順次渡し,最後に処理の結果を返す.
# [1,2,3,4,5]->[1,4,9,16,25]
def power(x):
return x * x
# result = map(power, [1,2,3,4,5,6])
result = map(lambda x:x*x, [1,2,3,4,5,6])
# for i in result:
# print(i)
print(list(result))
[1, 4, 9, 16, 25, 36]
from functools import reduce
li = [1,2,3,4,5,6]
result = reduce(lambda x,y:x*y,li)
#1*2=2 2*3=6 6*4=24...
print(result)
720
関数funcに基づいてinterableをフィルタリングし、interableのデータを関数funcに転送します.関数がTrueを返すと、そのデータは保持されます.そうしないと保持されません.
li = [1, 2, 4, 5, 6, 9, 10, 15]
result = list(filter(lambda x: x % 2 == 1, li))
print(result)
[1, 5, 9, 15]
データをソートします.keyはソートのルールを指定します.値は関数で、reverseはソートの順序を指定します.->昇順または降順
li = [1, 2, -4, -10, 12]
# rs = li.sort() #
res = sorted(li[:], key=abs, reverse=True)
print(res)
print(li)
[12, -10, -4, 2, 1]
[1, 2, -4, -10, 12]