PYTHON部分基础D3

顺序执行
https://www.liujiangblog.com/course/python/26

# 代码执行过程基本原则:
# 普通语句,直接执行;
# 碰到函数,将函数体载入内存,并不直接执行
# 碰到类,执行类内部的普通语句,但是类的方法只载入,不执行
# 碰到if、for等控制语句,按相应控制流程执行
# 碰到@,break,continue等,按规定语法执行
# 碰到函数、方法调用等,转而执行函数内部代码,执行完毕继续执行原有顺序代码

import os          # 1

print('<[1]> time module start')        # 2


class ClassOne():
    print('<[2]> ClassOne body')            # 3

    def __init__(self):                     # 10
        print('<[3]> ClassOne.__init__')

    def __del__(self):
        print('<[4]> ClassOne.__del__')     # 101

    def method_x(self):                     # 12
        print('<[5]> ClassOne.method_x')

    class ClassTwo(object):
        print('<[6]> ClassTwo body')        # 4


class ClassThree():
    print('<[7]> ClassThree body')          # 5

    def method_y(self):                     # 16
        print('<[8]> ClassThree.method_y')


class ClassFour(ClassThree):
    print('<[9]> ClassFour body')           # 6


def func():
    print("<func> function func")

if __name__ == '__main__':                      # 7
    print('<[11]> ClassOne tests', 30 * '.')    # 8
    one = ClassOne()                            # 9
    one.method_x()                              # 11
    print('<[12]> ClassThree tests', 30 * '.')  # 13
    three = ClassThree()                        # 14
    three.method_y()                            # 15
    print('<[13]> ClassFour tests', 30 * '.')  # 17
    four = ClassFour()
    four.method_y()

print('<[14]> evaltime module end')             # 100
-----------------------------------------------------------
<[1]> time module start
<[2]> ClassOne body
<[6]> ClassTwo body
<[7]> ClassThree body
<[9]> ClassFour body
<[11]> ClassOne tests ..............................
<[3]> ClassOne.__init__
<[5]> ClassOne.method_x
<[12]> ClassThree tests ..............................
<[8]> ClassThree.method_y
<[13]> ClassFour tests ..............................
<[8]> ClassThree.method_y
<[14]> evaltime module end
<[4]> ClassOne.__del__

__name__ 和__main__关系
https://www.cnblogs.com/chenhuabin/p/10118199.html

if __name__ == '__main__':
__name__是所有模块都会有的一个内置属性
当哪个模块(脚本)被直接执行时,该模块“__name__”的值就是“__main__”,
当被导入另一模块(脚本)时,“__name__”的值就是模块的真实名称。
所以当运行脚本时,自己脚本下if __name__ == '__main__':为True,后面的语句继续执行,
如果被其他脚本import或调用时,为Flase,后面语句不执行。

break只能退出一层循环,对于多层嵌套循环,不能全部退出。
continue不会退出和终止循环,只是提前结束当前轮次的循环

默认参数

# 默认参数必须在位置参数后面
# 有多个默认参数的时候,通常将更常用的放在前面,变化较少的放后面。
# 尽量给实际参数提供默认参数名。
def power(x, n = 2):
    return x**n
ret1 = power(10)   # 使用默认的参数值n=2
ret2 = power(10, 4)  # 将4传给n,实际计算10**4的值

动态参数

# 必须放在所有的位置参数和默认参数后面!
# *args:一个星号表示接收任意个参数。
# **kwargs:两个星表示接受键值对的动态参数
def func(a, b, c=1, *args, **kwargs):
    print('c的值是:', c)
    for arg in args:
        print(arg)

    for kwg in kwargs:
        print(kwg, kwargs[kwg])


lis = ['aaa', 'bbb', 'ccc']
dic = {
    'k1': 'v1',
    'k2': 'v2'
}

func(1, 2, *lis, **dic)
-----------------------------------------------
c的值是: aaa
bbb
ccc
k1 v1
k2 v2

全局变量 global

total = 0                        # total是一个全局变量
print("函数外的total的内存地址是: ", id(total))
def plus( arg1, arg2 ):
    global total    # 使用global关键字申明此处的total引用外部的total
    total = arg1 + arg2
    print("函数内局部变量total=  ", total)
    print("函数内的total的内存地址是: ", id(total))
    return total

plus(100, 200)
print("函数外部全局变量total= ", total)
print("函数外的total的内存地址是: ", id(total))
---------------------------
函数外的total的内存地址是:  140712987878000
函数内局部变量total=   300
函数内的total的内存地址是:  2464464009200
函数外部全局变量total=  300
函数外的total的内存地址是:  2464464009200
# global  
a = 1
print("1函数outer调用之前全局变量a的内存地址: ", id(a))
def outer():
    a = 2
    print("2函数outer调用之时闭包外部的变量a的内存地址: ", id(a))
    def inner():
        global  a   # 注意这行
        a = 3
        print("3函数inner调用之后闭包内部变量a的内存地址: ", id(a))
    inner()
    print("4函数inner调用之后,闭包外部的变量a的内存地址: ", id(a))
outer()
print("5函数outer执行完毕,全局变量a的内存地址: ", id(a))
--------------------------------------
1函数outer调用之前全局变量a的内存地址:  140712987878032
2函数outer调用之时闭包外部的变量a的内存地址:  140712987878064
3函数inner调用之后闭包内部变量a的内存地址:  140712987878096
4函数inner调用之后,闭包外部的变量a的内存地址:  140712987878064
5函数outer执行完毕,全局变量a的内存地址:  140712987878096
# nonlocal 
a = 1
print("1函数outer调用之前全局变量a的内存地址: ", id(a))
def outer():
    a = 2
    print("2函数outer调用之时闭包外部的变量a的内存地址: ", id(a))
    def inner():
        nonlocal a   # 注意这行
        a = 3
        print("3函数inner调用之后闭包内部变量a的内存地址: ", id(a))
    inner()
    print("4函数inner调用之后,闭包外部的变量a的内存地址: ", id(a))
outer()
print("5函数outer执行完毕,全局变量a的内存地址: ", id(a))
---------------------------
1函数outer调用之前全局变量a的内存地址:  140712987878032
2函数outer调用之时闭包外部的变量a的内存地址:  140712987878064
3函数inner调用之后闭包内部变量a的内存地址:  140712987878096
4函数inner调用之后,闭包外部的变量a的内存地址:  140712987878096
5函数outer执行完毕,全局变量a的内存地址:  140712987878032
# Python函数的作用域取决于其函数代码块在整体代码中的位置,而不是调用时机的位置
name ='jack'

def f1():
    print(name)

def f2():
    name = 'eric'
    f1()

f2()
----------------------------------------
jack

range()

# 默认从0开始,到参数减1,左闭右开
a = ['Google', 'Baidu', 'Huawei', 'Taobao', 'QQ']
for i in range(len(a)):
    print(i, a[i]) 
--------------------------------------
1 Baidu
2 Huawei
3 Taobao
4 QQ
# 切片
for i in range(10,1,-2):
    print(i)
------------------------------------
10
8
6
4
2

lambda匿名函数

# lambda 参数: 表达式。
# 匿名函数作为别的函数的返回值返回
def add(string, i):
    return lambda: int(string) + i
>>> f = lambda x: x * x
>>> f
<function <lambda> at 0x3216fef44>
>>> f(6)
36

推导式

# 1. 列表推导式
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
>>> [a + b for a in ‘123' for b in ‘abc']
['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']
# 2. 字典推导式
>>> dic = {x: x**2 for x in (2, 4, 6)}
>>> dic
{2: 4, 4: 16, 6: 36}
>>> type(dic)
<class 'dict'>
# 3. 集合推导式
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'d', 'r'}
>>> type(a)
<class 'set'>
# 4. 元组推导式
tup = tuple(x for x in range(9))
print(tup)
print(type(tup))
------------------------
结果:
(0, 1, 2, 3, 4, 5, 6, 7, 8)
<class 'tuple'>

迭代器

# Python中,list/tuple/string/dict/set/bytes都是可以迭代的数据类型。
# 可以通过collections模块的Iterable类型来判断一个对象是否可迭代:
>>> from collections import Iterable
>>> isinstance('abc', Iterable)         # str是否可迭代
True
>>> isinstance([1,2,3], Iterable)       # list是否可迭代
True
>>> isinstance(123, Iterable)           # 整数是否可迭代
False
# 通常要实现两个基本的方法:iter() 和 next()。
>>> lis=[1,2,3,4]
>>> it = iter(lis)
>>> type(it)
<class 'list_iterator'>
>>> next(it)
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
4
>>> next(it)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
# for循环遍历迭代器:
lis = [1,2,3,4]
it = iter(lis)          # 创建迭代器对象
for x in it:            # 使用for循环遍历迭代对象
    print (x, end=" ")

generator生成器

# 数量巨大,放入内存,压力大。不必创建完整的元素集合,推算出来到哪就计算到哪个。
# 斐波那契函数
def fibonacci(n):
    a, b, counter = 0, 1, 0
    while True:
        if counter > n:
            return
        yield a             # yield返回的函数变成一个生成器
        a, b = b, a + b
        counter += 1

fib = fibonacci(10)           # fib是一个生成器
print(type(fib))
for i in fib:
    print(i, end=" ")
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容