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_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

原文地址:https://www.cnblogs.com/leonraw/p/9040366.html

时间: 2024-08-30 11:24:40

python 12的相关文章

Python 12:mysql

Python 12:mysql 1.数据库基础 2.数据库基本操作 3.表操作 4.表内容操作 5.视图 6.事务 7.索引 8.pyMySQL 9.sqlalchemy ORM 一.数据库基础 1.关系型数据库 小型关系型数据库软件:MySql.SqlServer/Access.maridb(从原Mysql出来的人马组建的) 大型关系型数据库:Oracle.DB2/Infomix 非关系型数据库,比如云计算大数据所用的mongoDB 目前金融行业oracle占65%-70%,DB2占10%,i

Python 12 - Mysql & ORM

本节内容 1.数据库介绍 2.mysql数据库安装使用 3.mysql数据库基础 4.mysql命令 5.事务 6.索引 7.Python操作mysql 8.ORM sqlalchemy了解 数据库介绍 什么是数据库? (介于本人还是属于熟悉数据库的,这一块就基本复制粘贴了) 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.

python(12)---科赫特雪花

科赫特雪花属于分形几何中的一种,本程序利用递归的思想,进行绘制, 递归,难点在于寻找基例和递归链条. 1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 #koch.py 4 import turtle 5 def koch(size,n): 6 if n==0: 7 turtle.fd(size) 8 else: 9 for angle in[0,60,-120,60]: 10 turtle.left(angle) 11 koch(size

Python 1-2模块的循环导入问题

run.py文件: import m1 # 第一次导入 # 验证解决方案一: ''' 正在导入m1 正在导入m2 ''' # print(m1.x) # print(m1.y) # 验证解决方案二: import m1 # 第一次导入 ''' 正在导入m1 ''' # print(m1.x) # print(m1.f1) m1.f1() ''' 正在导入m2 m1.f1---->y:m2 m2.f2--->x:m1 ''' m1.py文件: # 错误示范 ''' print('正在导入m1')

Python 12 基础知识

原文:https://www.cnblogs.com/Lee-yl/p/9884055.html 原文:https://blog.csdn.net/juxiangming/article/details/70175985 在机器学习当中,什么是训练?什么是模型? 通过已知的数据和目标,调节算法的参数,这就是训练: 最后得到的映射,就是针对这个问题被训练出来的模型. Tensor和numpy之间的转换: 通过a.numpy(),就能将Tensor a转换成numpy数据类型,同时使用torch.f

Python自然语言工具包(NLTK)入门

在本期文章中,小生向您介绍了自然语言工具包(Natural Language Toolkit),它是一个将学术语言技术应用于文本数据集的 Python 库.称为“文本处理”的程序设计是其基本功能:更深入的是专门用于研究自然语言的语法以及语义分析的能力. 鄙人并非见多识广, 语言处理(linguistic processing) 是一个相对新奇的领域.如果在对意义非凡的自然语言工具包(NLTK)的说明中出现了错误,请您谅解.NLTK 是使用 Python 教学以及实践计算语言学的极好工具.此外,计

Python List数据打印后,更改List中的值报语法错误

number_list = [1,3,5,7,9] mix = ["python","12"] second_num = number_list[1] one_number = mix[0] print("one is {0} second is {1}".format(one_number, second_num) mix[1] = 100 print(mix) mix[1] = 100 报语法错误.如果注释掉打印语句则没有问题. ......

python - 常用模块 - 序列化相关模块

把数据序列化可以更加方便的在程序之间传输 在python中,常用json和pickle两个模块来对数据序列化: json模块: json,用于字符串 和 python数据类型间进行转换 Json 模块提供了四个功能:dumps.dump.loads.load json.dump() 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件 json.dumps() 将数据通过特殊的形式转换为所有程序语言都认识的字符串 json.dump和json.dumps很不同,json.dump主要

python入门(六)

python函数与模块 一.python函数 1.认识函数 函数分为系统函数与自定义函数. 1 #coding=utf-8 2 ''' 3 Created on 2016年4月19日 4 5 @author: Administrator 6 ''' 7 #函数的功能 8 #系统函数 9 #1.取字符串长度 10 ''' 11 a="hello world python!" 12 print len(a) 13 #2.字符串切割 14 a="student" 15 b