別の方法のpythonベースday10のデフォルトパラメータとローカルスコープピット、及び非局所グローバル方法、関数名、出力フォーマットを使用して、イテレータを反復可能

まず、トラップのデフォルトパラメータ

  • デフォルトのパラメータのデータ型で唯一の変数のためのトラップ
def func(name, list1=[]):
    list1.append(name)
    return list1

ret1 = func('jason')
print(ret1, id(ret1))  # ['jason'] 2246045611720
ret2 = func('carly')
print(ret2, id(ret2))  # ['jason', 'carly'] 2246045611720

この結果から、場合は、デフォルトのパラメータは、関係なく、何回、このデフォルトの関数呼び出しの、同じメモリアドレスのデフォルトパラメータ変更可能なデータ型です。

演習1

def func(a, list1=[]):
    list1.append(a)
    return list1

print(func(10))  # [10]
print(func(20, []))  # [20]  # 没有调用默认参数
print(func(30))  # [10, 100]  # 再一次调用默认参数,而之前调用默认参数之后,list1 = [10]

演習2

def func(a, list1=[]):
    list1.append(a)
    return list1
ret1 = func(10)
ret2 = func(20, [])
ret3 = func(30)
print(ret1)  # [10, 30]
print(ret2)  # [20]
print(ret3)  # [10, 30]
print(id(ret1) == id(ret3))  # True # ret1 和ret3 共用一个内存地址

第二に、ローカルスコープピット

あなたは、変数を定義しますが、この変数はそれらを基準に定義されている場合、この関数の前に、Pythonインタプリタは、これが問題の文法だと思います

例えば:

count = 1
def func():
    print(count)
    count = 2
func()
# 程序报错
# UnboundLocalError: local variable 'count' referenced before assignment

三、グローバル

1.ローカルでグローバル変数を宣言することができます

def func():
    global name
    name = 'jason'
func()
print(name)
print(globals())

図2は、ローカルでグローバル変数を変更することができます

count = 1
def func():
    global count
    count += 1
func()
print(count)

四、非ローカル

1.グローバル変数の操作をすることはできません

count = 1
def func():
    nonlocal count
func()

2.ローカルスコープ:内部機能変更機能の外層のローカル変数

def func1():
    count = 1
    def func2():
        nonlocal count
        count += 1
    func2()
    print(count)
func1()

V.アプリケーション関数名

1.関数+の名前()この関数を実行することができます

def func():
    print(123)
func()
print(func, type(func))

2.関数名は変数です

def func():
    print(123)
f = func
f()  # 123
def func1():
    print('this is func1')
def func2():
    print('this is func2')
func2 = func1
func2()  # this is func1

3名は、コンテナクラスのデータ要素型として使用することができます

def func1():
    print('this is func1')
def func2():
    print('this is func2')
def func3():
    print('this is func3')
li = [func1, func2, func3]
for i in li:
    i()

4.名前をパラメータとして指定することができます

def func1(a):
    a()
    print('this is func1', end='')
def func2():
    print('this is func2', end='\n')
func1(func2)  # this is func2 this is func1

名前は、関数の戻り値として使用することができます

def func1():
    print('this is func1')
def func2(a):
    print('this is func2')
    return a
ret = func2(func1)
ret()

第六に、フォーマットされた出力

これまで学んだフォーマットされた入力%sのギ

name = 'jason'
age = 24
msg1 = '我叫%s, 今年%s' % (name, age)
mgs2 = '我叫{}, 今年{}'.

新機能

name= 'jason'
age = 24
msg = f'我叫{name}, 今年{age}'

あなたは式を追加することができます

dic = {'name': 'jason', 'age': 24}
msg = f"我叫{dic.get('name')}, 今年{dic['age']}"
print(msg)

count = 2
print(f'>>>{count**3}')

name = 'jason'
print(f'我的名字是{name.upper()}')

機能への書き込みを組み合わせます

def _sum(a, b):
    return a + b
print(f'结果为{_sum(2, 4)}')

七、イテレータ

  • 反復可能なの
    オブジェクト:すべてのオブジェクトでのpythonを。
    反復可能な:更新の繰り返し。、プロセスサイクルを繰り返します。
    内部前記':反復可能オブジェクトの__iter__オブジェクトのメソッド
s = 'sdfsdf'
print(dir(s))
print('__iter__' in dir(s))
  • イテレータ

    ツールを反復更新され
    内部は「を含む__iter__」メソッドを、そして含まれている「__next__オブジェクトのメソッドのイテレータを

    with open('test.txt', 'w', encoding='utf-8') as f1:
        print('__iter__' in dir(f1) and '__next__' in dir(f1))  # True
    
  • 反復可能オブジェクトは、イテレータに変換することができます

s = 'abc'
obj = iter(s)  # 或者s.__iter__()
print(obj)

print(next(obj))  # a  # 或者s1.__next__()
print(next(obj))  # b
print(next(obj))  # c
  • イテレータの長所と短所

    メモリの保存1

    2.慣性メカニズム、次回は、単に値をとります

    3.スロー

    4.イテレータは、常にこの場所の値を覚えています

  • 反復同等のオブジェクトとイテレータ

    • より直感的であるイテレート可能オブジェクトを操作する方法であって、比較的少ないデータは、データセットの(オブジェクトの数百万)が格納されます。

    • データの焦点と柔軟性処理、十分なメモリ空間は、データセットは、反復の対象とすることができる場合

    • 反復子は、非常にメモリ保存、位置の値を記録することができ、値はループ+次の方法を介して直接であってもよいが、比較データの単一のセットを操作しない直感的な方法

    • データが大きすぎる場合には、メモリの量は、その多くのデータを処理するのに十分である、または第一の要因として、メモリを節約するために、データは、イテレータに設定する必要があります

  • whileループのメカニズムのためのループシミュレーション

li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
obj = iter(li)
while 1:
    try:
        print(next(obj))
    except StopIteration:
        break

おすすめ

転載: www.cnblogs.com/west-yang/p/12596167.html