python 12
#! /usr/bin/python a = 1
b = [2, 3] def func():
a = 2
print("in func a:", a)
b[0] = 1
print("in func b:", b) print("before func a:", a)
print("before func b:", b)
func()
print("after func a:", a)
print("after func b:", b)
before func a: 1
before func b: [2, 3]
in func a: 2
in func b: [1, 3]
after func a: 1
after func b: [1, 3]
def func():
if a == 1:
a = 2
print("in func a:", a)
b[0] = 1
print("in func b:", b) # UnboundLocalError: local variable 'a' referenced before assignment
网络解释:
可以看出,对于变量a,在函数func中"a = 2",因为存在既可以表示引用全局变量a,也可以表示创建一个新的局部变量的歧义,所以python默认指定创建一个新的局部变量来消除这一歧义,但对于列表b而言,"b[0] = 1"不存在这种歧义,因此直接修改了全局变量,但是如果改成了"b = [3, 4]",那么b也会变成局部变量。特别地,当在func中a = 2之前加入"if a == 1:"这一语句,脚本运行出错,因为这一语句引入了全局变量,导致了"a = 1"这一语句无法创建同名的局部变量。
自己理解:
若在func中a = 2之前加入"if a == 1:"这一语句,脚本运行出错,报“UnboundLocalError: local variable 'a' referenced before assignment”错误,“在创建局部变量 'a' 之前(a = 2),引用了局部变量 'a' (a == 1)”。故,若计算机发现在函数局部已经创建了命名空间,则进行引用变量时,会被认为引用的是局部变量。
****************************************************************
零、默认参数为可变元素时的处理
def func(a, lis=[]):
lis.append(a)
return lis lis1 = func()
lis1.append('a')
lis2 = func('b')
print(lis2)
[, 'a', 'b']
可看出,Pass
一、带参数的装饰器
def func_out(turn):
def func(f):
def inner(*args, **kwargs):
if turn:
print('before')
ret = f(*args, **kwargs)
print('after')
else:
ret = f(*args, **kwargs)
return ret
return inner
return func @func_out(True)
def good(a, b):
print(a, b, 'this func is pretty good') good(1, 2)
作用:可以传入一个变量,控制函数内部的东西~
二、俄罗斯套娃(多个装饰器)
def func_1(f):
def inner_1(*args, **kwargs):
print('before_1')
ret = f(*args, **kwargs)
print('after_1')
return ret
return inner_1 def func_2(f):
def inner_2(*args, **kwargs):
print('before_2')
ret = f(*args, **kwargs)
print('after_2')
return ret
return inner_2 @func_2
@func_1
def good(a, b):
print(a, b, 'this func is pretty good') good(1, 2)
before_2
before_1
1 2 this func is pretty good
after_1
after_2
python 12的更多相关文章
- python 12 模块与包
一.不知道什么原则 python文件下面只写方法,所有的可直接执行的代码,都放在条件下 原因.该文件有可能被其他文件调用 二.eval() 将字符串转为相应的数据格式可以想象json转为map 三.模 ...
- Python 12 - Mysql & ORM
本节内容 1.数据库介绍 2.mysql数据库安装使用 3.mysql数据库基础 4.mysql命令 5.事务 6.索引 7.Python操作mysql 8.ORM sqlalchemy了解 数据库介 ...
- [ Python - 12 ] 线程的信号量、标志位及队列
线程的信号量 线程的信号量是同时允许一定数量的线程更改数据,主要作用在于限制线程的并发. #!_*_coding:utf-8_*_ # Author: hkey import threading, t ...
- python 12 生成器
目录 1. 生成器 yeild 2. 推导式 2.1 列表推导式: 2.2 生成器推导式: 2.3 字典推导式: 2.4 集合推导式: 3. 内置函数(一) 1. 生成器 yeild 生成器的本质就是 ...
- 《转》python 12 列表解析
转自 http://www.cnblogs.com/BeginMan/p/3164937.html 一.列表解析 列表解析来自函数式编程语言(haskell),语法如下: [expr for iter ...
- Python——12类的继承
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- python <12> socket 编程
1.socket编程需要两个部分 服务器与客户端我们的python中调用 socket包就不需要自己写协议了(socket编程中windows 与Linux中的效果是完全不相同了,次代码最好是放在Li ...
- 【Python 12】汇率兑换5.0(Lambda函数)
1.案例描述 设计一个汇率换算程序,其功能是将美元换算成人民币,或者相反. 2.0增加功能:根据输入判断是人民币还是美元,进行相应的转换计算 3.0增加功能:程序可以一直运行,知道用户选择退出 4. ...
- python ---12 生成器 推导式
一.生成器 函数中有yield 的就是生成器函数(替代了return) 本质就是迭代器 一个一个的创建对象 节省内存 1.创建生成器 最后以yield结束 1. 通过⽣成器函数 2. ...
随机推荐
- hdu 1754 I Hate It 解题报告(线段树 代码+注释)
题目链接:传送门 I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 生命周期--JSF
生命周期处理两种请求:初始请求和回发.当用户首次请求页面时,他或她正在首次请求该页面.当用户执行回发时,由于执行初始请求,他或她会提交以前加载到浏览器中的页面中包含的表单.当生命周期处理初始请求时,它 ...
- java基础2(二)
Servlet 注意: servletConfig可以获取配置文件(xml文件)中配置的servlet对象的初始化参数. url-pattern 缺省servlet 注意:tomcat目录下有一个默认 ...
- 如何查看tomcat的支持的jdk、servlet、jsp的版本
解压servlet-api 查看 可以看出,支持的servlet版本是4.0,jdk是1.8
- shell练习题1
需求如下: 写一个shell脚本,把10.0.1.0/24网段在线的ip列出来. 参考解答如下 方法1 #!/bin/bash ip="10.0.1." for i in $(se ...
- UBUNTU 16.04 安装AVD "An error occurred while running "android create avd
安装库即可sudo apt-get install lib32stdc++6
- struts2之数据校验
概述 在提交表单数据时,如果数据需要保存到数据库,空输入等可能会引发一些异常,为了避免引起用户的输入引起底层异常,通常在进行业务逻辑操作之前,先执行基本的数据校验. 下面通过四种方式来阐述Struts ...
- Struts框架原理及应用
Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件. 核心控制器FilterDispatcher是Struts ...
- python 面试题之 生成器
如下函数执行结果是什么? 答案: [20, 21, 22, 23] 核心要点:本题重点在对生成器的理解, 生成器具有惰性机制 ,只有在取值的时候才执行. 解析: for 循环遍历列表,执行了两次 第 ...
- Linux:Red Hat系统的安装
今天高兴,所以我写这一期,这一期写的是Red Hat系统的安装,这个开发系统也是红帽企业制作出来的,关于这款系统的相关资料就自行百度吧!话不多说,直接进入这期的内容吧! 安装Red Hat系统 系统下 ...