zoukankan      html  css  js  c++  java
  • python基础复习10

      1 # 函数进阶
      2 """
      3 命名空间和作用域
      4 
      5 *内置命名空间  -----python解释器
      6     # 就是Python解释器一启动就可以使用的名字存储在内置命名空间中
      7     内置的名字在启动解释器的时候被加载进内存里
      8 
      9 *全局命名空间 -----我们写的代码,但不是函数中的代码
     10     # 是在程序从上到下被执行的过程中依次加载进内存的
     11      放置了我们设置的所有变量名和函数名
     12 
     13 *局部命名空间  ----函数
     14     # 就是函数内部定义的名字
     15      当调用函数的时候,才会产生这个命名空间 随着函数执行的结束 这个命名空间就有消失了
     16 
     17 在局部:可以使用全局、内置命名空间中的名字
     18 在全局:可以使用内置命名空间中的名字,但不能使用局部的命名空间
     19 
     20 在内置: 不可以使用全局、局部的命名空间
     21 
     22 可以这样想像:内置就是一个大盒子,它包含了全局,全局又是一个中盒子,它包含了局部这个小盒子
     23 局部找不到可以向上(全局)中找,没有还可以再向上(内置)中找,但不能向下去找
     24 
     25 依赖倒置原则
     26 """
     27 
     28 # 作用域 两种
     29 # 全局作用域  --作用在全局 -- 内置和全局名字空间中的名字都属于全局作用域
     30 
     31 # 局部作用域 -- 作用在局部 -- 函数
     32 
     33 # 例子:
     34 
     35 # a = 1
     36 # def func():
     37 #     global a
     38 #     a += 1
     39 #
     40 # func()
     41 # print(a)
     42 # 局部变量不能修改全局变量
     43 # 如果想要修改,需要在程序的一开始添加global声明
     44 
     45 
     46 # def max1(a,b):
     47 #     return a if a > b else b
     48 
     49 # def the_max(x,y,z):  # 函数的嵌套调用
     50 #     c = max(x,y)
     51 #     return max(c,z)
     52 #
     53 # print(the_max(3,5,3))
     54 
     55  
     56 
     57 # def outer():
     58 #     a = 1
     59 #     def inner():
     60 #         print(a)
     61 #         print("inner")
     62 #
     63 #         def inner2():
     64 #             print(a)
     65 #             print('inner2')
     66 #         inner2()
     67 #     inner()
     68 #
     69 # outer()
     70 
     71  
     72 
     73 
     74 # 闭包:嵌套函数,内部函数调用外部函数的变量
     75 # def outer():
     76 #     a = 1
     77 #     def inner():
     78 #         print(a)
     79 #     print(inner.__closure__) #  返回值里有cell 就是闭包函数
     80 #
     81 # outer()
     82 
     83  
     84 
     85 
     86 # def outer():
     87 #     a = 1
     88 #     def inner():
     89 #         print(a)
     90 #     return inner
     91 #
     92 # inn = outer()  # 先看outer  先调用 然后执行outer这个函数,会有返回值inner,然后用inn去接收它
     93 # inn()
     94 
     95  
     96 
     97 # def qqxing(l = []):
     98 #     l.append(1)
     99 #     print(l)
    100 #
    101 # qqxing()
    102 # qqxing()
    103 # qqxing()
    104 
    105 
    106 # 练习题
    107 # 写函数,接收n个数字,求这些参数数字的和。
    108 # def sum_func(*args):
    109 #     total = 0
    110 #     for i in args:
    111 #         total += i
    112 #     return total
    113 # print(sum_func(1,2,4,6,3,1225))
    114 
    115 # 读代码,回答,代码中,打印出来的值a,b,c 分别是什么?为什么?
    116 # a = 10
    117 # b = 20
    118 # def test5(a,b):
    119 #     print(a,b)
    120 # c = test5(b,a)
    121 # print(c)  a = 20 b = 10 c = None(因为没有返回值)
    122 
    123 # 读代码,回答,代码中,打印出来的值a,b,c 分别是什么?为什么?
    124 # a = 10
    125 # b = 20
    126 # def test5(a,b):
    127 #     a = 3
    128 #     b = 5
    129 #     print(a,b)
    130 # c = test5(b,a)
    131 # print(c)
    132 
    133 # 写函数,检查获取传入列表或元祖对象的所有奇数位索引对应的元素,
    134 # 将其作为新的列表返回给调用者。
    135 
    136 # def func(l):
    137 #     return l[1::2]
    138 # a = func([1,2,3,4,5,6,7,8,9])
    139 # print(a)
    140 
    141 # 写函数,判断用户传入的对象(字符串、列表、元祖)长度是否大于5。
    142 
    143 # def func(l):
    144 #     return len(l) > 5
    145 # print(func("123455"))
    146 
    147 # 写函数,检查传入列表的长度,如果大于2,
    148 # 那么仅保留前两个长度的内容,并将新内容返回给调用者。
    149 
    150 # def func(l):
    151 #     return l[:2]  #if len(l) > 2: 切片 :你切的长度列表中没有,它是不会报错的,所以不用判断
    152 # print(func([1,2,3,4,5]))
    153 
    154 # 写函数,计算传入字符串中[数字]、[字母]、[空格]、[其他]的个数,并返回结果。
    155 # def func(s):
    156     # num = 0  #计算数字的个数
    157     # space = 0  # 空格
    158     # alpha = 0  # 字母
    159     # other = 0  # 其它
    160 #     dic = {'num': 0,'alpha': 0,'space': 0,'other': 0}
    161 #     for i in s:
    162 #         if i.isdigit():
    163 #             dic['num'] += 1
    164 #         elif i.isalpha():
    165 #             dic['alpha'] += 1
    166 #         elif i.isspace():
    167 #             dic['space'] += 1
    168 #         else:
    169 #             dic['other'] += 1
    170 #     return dic
    171 # print(func("qa12wedc f  efdc32ec+++"))
    172 
    173 
    174 # 写函数,检查传入字典的每一个value的长度,如果大于2,
    175 # 那么仅保留前两个长度的内容,并将新内容返回给调用者。
    176 # dic = {'k1':'v1v2', 'k2':[11,22,33,44]}
    177 # PS:字典中的value只能是字符串或列表
    178 
    179 # def func(dic):
    180 #     for k in dic:
    181 #         if len(dic[k]) > 2:
    182 #             dic[k] = dic[k][:2]
    183 #     return dic
    184 # dic = {'k1':'v1v2', 'k2':[11,22,33,44]}
    185 # print(func(dic))
    186 
    187  
    188 
    189 # 写函数,接收两个数字参数,返回比较大的那个数字。
    190 # def func(a,b):
    191 #     if a > b:
    192 #         return a
    193 #     else:
    194 #         return b
    195 # print(func(3,5))
    196 
    197 
    198 
    199 # 三元运算
    200 # a = 1
    201 # b = 5
    202 # c = a if a > b else b  #  三元运算
    203 # print(c)
    204 
    205 # def func(a,b):
    206 #     return a if a > b else b
    207 # print(func(3,6))
    208 
    209 
    210 
    211 # import time
    212 # def func():
    213 #     start = time.time()  # 获取当前时间
    214 #     print('good moring')
    215 #     time.sleep(2)
    216 #     end = time.time()
    217 #     return end - start
    218 #
    219 # print(func())
    220 
    221 
    222 
    223 # 装饰器
    224 # import time
    225 # def func():
    226 #     time.sleep(0.01)
    227 #     print('good moring')
    228 #
    229 # def timmer(f):   #  装饰器函数
    230 #     def inner():
    231 #         start = time.time()
    232 #         f()  # 被装饰的函数
    233 #         end = time.time()
    234 #         print(end - start)
    235 #     return inner
    236 # func = timmer(func)  ----->  这句话相当于语法糖 @timmer
    237 # func()
    238 # 不想修改函数的调用方式,但是还想在原来的函数前后添加功能
    239 # timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用
    240 
    241  
    242 
    243 # 装饰器的最终形成和固定格式
    244 # import time
    245 # def timmer(f):
    246 #     def inner():
    247 #         start = time.time()
    248 #         f()
    249 #         end = time.time()
    250 #         print(end - start)
    251 #     return inner
    252 
    253 # @timmer        #  语法糖  在被装饰的函数上面加上@装饰器的名字(必须紧挨着)
    254 # def func():    #  被装饰的函数
    255 #     time.sleep(0.01)
    256 #     print('Happy New Year!')
    257 #
    258 # # func = timmer(func)
    259 # func()
    260 
    261  
    262 
    263 # 带返回值的装饰器函数
    264 # import time
    265 # def timmer(f):
    266 #     def inner():
    267 #         start = time.time()
    268 #         ret = f()
    269 #         end = time.time()
    270 #         print(end - start)
    271 #         return ret
    272 #     return inner
    273 #
    274 # @timmer
    275 # def func():
    276 #     time.sleep(0.01)
    277 #     print('Happy New Year!')
    278 #     return '新年好!'
    279 #
    280 # ret = func()
    281 # print(ret)
    282 
    283  
    284 
    285 # 带参数的装饰器函数
    286 # import time
    287 # def timmer(f):
    288 #     def inner(*args,**kwargs):
    289 #         start = time.time()
    290 #         ret = f(*args,**kwargs)
    291 #         end = time.time()
    292 #         print(end - start)
    293 #         return ret
    294 #     return inner
    295 #
    296 # @timmer
    297 # def func():
    298 #     time.sleep(0.01)
    299 #     print('Happy New Year!')
    300 #     return '新年好!'
    301 #
    302 # ret = func()
    303 # print(ret)
    304 
    305  
    306 
    307 # import time
    308 # def wrapper(f):
    309 #     def inner(*args,**kwargs):
    310 #         """再被装饰的函数之前要做的事"""
    311 #         ret = f(*args,**kwargs)
    312 #         """在被装饰的函数之后要做的事"""
    313 #         return ret
    314 #     return inner
    315 #
    316 # @wrapper
    317 # def func():
    318 #     time.sleep(0.01)
    319 #     print('Happy New Year!')
    320 #     return '新年好!'
    321 
    322  
    323 
    324 # 装饰器的固定模式
    325 # def wrapper(func):
    326 #     def inner(*args,**kwargs):
    327 #         ret = func(*args,**kwargs)
    328 #         return ret
    329 #     return inner
    330 #
    331 # @wrapper
    332 # def qqxing():
    333 #     print(1225)
    334 #
    335 # ret = qqxing()
    336 # print(ret)
    337 
    338  # 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。
  • 相关阅读:
    Java虚拟机(第二版) 学习笔记之Class类文件的结构
    JVM之深入浅出之垃圾收集算法
    Java虚拟机(第二版) 学习笔记之OutOfMemoryError
    Java虚拟机(第二版) 学习笔记
    平滑加权轮询负载均衡(轮询)算法
    java AQS(AbstractQueuedSynchronizer)同步器详解
    mybatis Interceptor拦截器代码详解
    aspectj编程简介
    Java并发编程阅读笔记-Java监视器模式示例
    我们该怎么结合日志做优化
  • 原文地址:https://www.cnblogs.com/pioneerLee/p/10206963.html
Copyright © 2011-2022 走看看