C语言中,在函数内部可以定义static类型的变量,这个变量是属于这个函数的全局对象。在Python中也可以实现这样的机制。

def f():
if not hasattr(f, 'x'):
f.x = 0
print(f.x)
f.x+=1 f()#输出1
f()#输出2

类中可以有函数,类中可以有类,函数中可以有类,函数中也可以有函数。

函数中的类是每次都要加载的。

def f():
class haha:
cnt=1
def __init__(self):
print("haha"*haha.cnt)
haha.cnt+=1
if not hasattr(f, 'x'):
f.x = 0
x=haha()#定义一个haha类型的变量
print(f.x)
f.x+=1 f()#输出0和haha
f()#输出1和haha

在函数f()内部定义了一种类型haha,haha有一个静态变量cnt。每次执行函数f()都要对haha类型进行加载(也就是初始化类型的静态变量)

可以用如下方式实现保持每次调用f()函数使用同一个haha。

def f():
class haha:
cnt=1
def __init__(self):
print("haha"*haha.cnt)
haha.cnt+=1
if not hasattr(f, 'x'):
f.x = 0
if not hasattr(f,'ha'):
f.ha=haha
print(f.x)
f.ha()
f.x+=1 f()#输出0和haha
f()#输出1和hahahaha

Python函数的静态变量的更多相关文章

  1. php 函数中静态变量的问题

    <?php function msg() { static $a = 0; echo $a++, '<br />'; } msg(); msg(); msg(); 上述代码,分别输出 ...

  2. php自定义函数之静态变量

    如果我想知道函数被调用了多少次怎么办?在没有学习静态变量的时候,我们没有好的办法来解决. 静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行. ...

  3. 46 求1+2+3+...+n 静态成员函数和静态变量

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 思路: 1)使用构造函数的方法,需要使用sta ...

  4. 第5.4节 Python函数中的变量及作用域

    一.函数中的变量使用规则 函数执行时,使用的全局空间是调用方的全局空间,参数及函数使用的局部变量存储在函数单独的局部名字空间内: 函数的形参在函数中修改了值时,并不影响调用方本身的数据,但如果形参是一 ...

  5. Python函数:对变量赋值,变量即局部

    b = 6 def f2(a): print(a) print(b) b = 9 UnboundLocalError: local variable 'b' referenced before ass ...

  6. python类静态变量

    python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...

  7. 动态链接库函数内的静态变量,奇妙的UNIQUE Bind

    title: 动态链接库函数内的静态变量,奇妙的UNIQUE Bind date: 2018-09-28 09:28:22 tags: --- 介绍 模板函数和内敛函数中的静态变量,在跨so中的表现, ...

  8. 深入理解PHP内核(九)变量及数据类型-静态变量

    原文链接:http://www.orlion.ga/251/ 通常静态变量是静态分配的,他们的生命周期和程序的生命周期一样长,只有在程序退出后才结束生命周期,这和局部变量相反,有的语言中全局变量也是静 ...

  9. OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析

    ☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ...

随机推荐

  1. Java方法containsAll学习

    有时候我们需要判断B链表是不是A链表的子集,我们可以使用A.containsAll(B)来判断,当返回值是true的时候就表明B链表是A链表的子集,当返回值是false时候就表明B链表不是A链表的子集 ...

  2. 我的四轴专用PID参数整定方法及原理---超长文慎入(转)

    给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...

  3. 原:wireshare使用技巧收集

    /data/local/tcpdump -p -vv -s 0 -w /sdcard/ThinkDrive.pcap     先抓一个pcap的包. 1. 查看所有的链接与流量 统计->对话 这 ...

  4. 下周二推出“音视频技术WebRTC初探”公开课,欢迎捧场!

     下周二推出"音视频技术WebRTC初探"公开课,欢迎捧场! 公开课课程链接:http://edu.csdn.net/huiyiCourse/detail/90 课程的解说资料 ...

  5. MongoDB: 如何删除一个collection中的一个字段?

      Try this: If your collection was 'example' db.example.update({}, {$unset: {words:1}}, false, true) ...

  6. C#.NET常见问题(FAQ)-如何判断两个类是否相同类型

    可以用is方法判断是否是一个类   更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123   我的在线论坛: http://csr ...

  7. C++实现一个web服务器, 弱智版服务器

    监听本地的8888端口, 当在浏览器中访问这个地址的时候, 返回一堆HTML数据, 这种方式返回的数据不稳定,不同浏览器解析不同, 因为我们没有定义返回文件类型: #include <stdli ...

  8. C++中引用传递与指针传递的区别

    最近Garena面试的过程中,面试官提了一个问题,C++中引用传递和指针传递的区别? 根据自己的经验,联想到了swap函数,只知道既可以用引用来实现,又可以用指针传递来实现,至于二者有何区别,自己还真 ...

  9. LintCode: Convert Sorted Array to Binary Search Tree With Minimal Height

    C++ /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; ...

  10. 微信小程序 - 授权页面

    小程序授权方式更改以后,我们只有两种选择. 1.在主页使用遮罩层,类似这样的(会造成一点卡顿) 2.新增登陆授权页(经过反复的思考,我还是觉得用这个好) 这个也不错: https://blog.csd ...