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. ...
随机推荐
- HTML5离线存储的工作原理和使用
在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件. 原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),通过这个 ...
- Ubuntu连网的问题
Ubuntu一直提示网络offline,disconnection 首先,进入了无线网络,进入属性,允许其他网络用户通过此计算机的Internet连接: 但是虚拟机仍显示网络未连接:(不知道此步骤是不 ...
- php 查询mysql数据批量转为PDF文件二(批量使用wkhtmltopdf html导出PDF)
上节讲到配置wkhtmltopdf,这节讲下如何批量操作 首先讲下wkhtmltopdf如何使用 直接命令行输入: wkhtmltopdf http://www.baidu.com/ baidu.p ...
- Robot Framework自动化使用
自动化测试框架---Robot Framework Robot Framework是用Python语言写的,所以在安装Robot Framework以前必须安装Python环境.Robot Frame ...
- Https 单向验证 双向验证
通讯原理 participant Client participant Server Client->>Server: 以明文传输数据,主要有客户端支持的SSL版本等客户端支持的加密信息 ...
- Django基础-02
django的介绍: Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西.为了达到这个目标,Dj ...
- 004dayPython学习输入并输出用户名和密码
在python 2.7中,捕获用户输入用raw_input 一.捕获并打印用户名和密码 要求: 输入用户名和密码都可见 # -*- coding:utf-8 -*-userName = raw_inp ...
- 使用eclipse整合ssh项目的例子--lljf(1)
最近向自己单独做一个基于ssh的项目,来预习和巩固自己的Java基础.找了一个实际生活中的定做衣服的例子来做一做,放到博客上给大家一起分享学习,后边会持续更新项目编写时候遇到的困难和使用的技术等. 1 ...
- 第4次作业 -- 基于Jenkins的持续集成
Jenkins 配置使用心得 先在 https://jenkins.io/download/ 下载Jenkins 下载之后安装,在指定的地方找到了初始密码,安装了一些插件之后,Jenkins就可以使用 ...
- type-of-python作业-判断字符串是否属于回文需要忽略其中的标点、空格与大小写
type-of-python作业 作业练习:要想检查文本是否属于回文需要忽略其中的标点.空格与大小写.例如,"Rise to vote, sir."是一段回文文本,但是我们现有的程 ...