#encoding=utf-8
#http://python.jobbole.com/85231/
#作用域
a=1
def A(a):
  a=2
  print 'A:',a

def B():
  print 'B:',a
A(a)
print '外部:',a
B()
#函数内的赋值无法改变函数外的值
'''
A: 2
外部: 1
B: 1
'''
#局部作用域

def func():
  name = "lzl"

#print(name)#name 'name' is not defined
#函数内赋值无法在函数外生效

#块级作用域

if 1 == 1:
  name = "lzl"

print(name)#lzl
#模块内的赋值可以被模块外访问

#作用域链

name = "lzl"
def f1():
  name = "Eric"
  def f2():
    name = "Snor"

print(name)
f2()
f1()#Snor
#优先读取内部函数

#终极版作用域

name = "lzl"

def f1():
  print(name)

def f2():
  name = "eric"
f1()#相当于return f1

f2()#lzl

a=13
def a():
  print a
a()#没有输出,函数内部无法访问函数外部的变量

class a():
x=13

print x#name 'x' is not defined
#不能直接访问一个类的内部函数或变量,但是可以通过先构造类,再去访问
#比如:a()之后在print x就可以有结果了
class a():
  def bb(self):
    x=13
    x+=1
    return x#name

#bb()#name 'bb' is not defined
aa=a()
print aa.bb()#14

#函数也一样不能直接调用,可以a.函数名来调用

#各种方法类型
class A(object):
  def m1(self,n):
    print 'self:',self
  @classmethod#如果没加类方法,结果与m1相同
   def m2(cls,n):
     print 'cls:',cls
  @staticmethod#未加静态方法,则报错
  def m3(n):
    print n

a=A()
a.m1(1)#self: <__main__.A object at 0x00000000023E54A8>
#A.m1(1) #报unbound method m1(),不可以绑定类
a.m2(1)#cls: <class '__main__.A'>
A.m2(1)#cls: <class '__main__.A'>
#均指向类
a.m3(1)#1
A.m3(1)#1
#静态函数跟普通函数没什么区别,与类和实例都没有所谓的绑定关系,它只不过是碰巧存在类中的一个函数而已

#类变量,实例变量
class A():
para='aaa'
a=A()
b=A()
b.para='bbb'
print a.para#aaa
print b.para#bbb
print A.para#aaa
#首先class内的方法和变量都是可以被直接访问的,其次实例变量会覆盖类变量,但类仅覆盖此实例

#各种下划线命名
'''
__foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突.

_foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.

__foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名.
'''
class C():
  def __init__(self):
    self.__para='aaa'#private
    self._para='bbb'#无法import到其它模块
c=C()
#print c.__para #C instance has no attribute '__para'
print c._para#bbb
#根据python的约定,应该将其视作private,而不要在外部使用它们(如果你非要使用也没辙)
print c._C__para#aaa
#"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
#"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据
#格式化
name='GarVicker'
profession='painter'
old=122
print "My name is %s,I'm a %s,%d years old"%(name,profession,old)
#My name is GarVicker,I'm a painter,122 years old

#非确定个数参数

def fun(a,b,c):
  print a,b,c
l=[1,2,3]
#fun(l)#fun() takes exactly 3 arguments (1 given)
fun(*l)#1 2 3
l=[1,2]#fun(*l)#fun() takes exactly 3 arguments (2 given)
#*用来逐个添加l内的各个参数
def fun2(*args):#args输出元组
  print args
fun2(*l)#(1, 2)
fun2(l)#([1, 2],)

def fun3(n,**kwargs):#args输出元组
  print n,kwargs
m={a:3,b:4,c:5}
n={'a':3,'b':4,'c':5}

fun3(m)
#{<__main__.A instance at 0x00000000028C6E08>: 4, <__main__.C instance at 0x00000000028C6E48>: 5, <__main__.A instance at 0x00000000028C6DC8>: 3} {}
#把a,b,c当成class输出了
fun3(n)#{'a': 3, 'c': 5, 'b': 4} {}
fun3(3,b=4,c=5)#3 {'c': 5, 'b': 4}
#常规参数列表中只有一个变量’a’.但是通过”**kwargs”,可以传多个键值参数
fun3(1, **{'b':2, 'c':34})#1 {'c': 34, 'b': 2}

#闭包
'''
1、把局部变量 x 作为参数了传递进来
2、嵌套函数不再直接在函数里被调用,而是作为返回值返回
3、这里的 closure就是一个闭包
'''
def outer(func):

  def inner():

    print("记录日志开始")

    func() # 业务函数

    print("记录日志结束")

  return inner
#装饰器
@outer
def foo():

  print("装饰器foo")

foo()
'''
记录日志开始
装饰器foo
记录日志结束
'''
#等同于
def foo():

  print("不用装饰器的foo")

foo1 = outer(foo)

foo1()
'''
记录日志开始
不用装饰器的foo
记录日志结束
'''

#单例模式:该模式的主要目的是确保某一个类只有一个实例存在
#使用模块方法
#mysingleton.py
class Singleton(object):
  def foo(self):
    pass
singleton = Singleton()
#使用时from mysingleton import singleton,singleton。foo()

#协程
import time

def consumer():
  r = ''
  while True:
    n = yield r
    if not n:
      return
    print('[CONSUMER] Consuming %s...' % n)
    time.sleep(1)
    r = '200 OK'

def produce(c):
  c.next()
  n = 0
  while n < 2:
    n = n + 1
    print('[PRODUCER] Producing %s...' % n)
    r = c.send(n)
    print('[PRODUCER] Consumer return: %s' % r)
  c.close()

c = consumer()
#produce(c)
'''
[PRODUCER] Producing 1...
[CONSUMER] Consuming 1...
[PRODUCER] Consumer return: 200 OK
[PRODUCER] Producing 2...
[CONSUMER] Consuming 2...
[PRODUCER] Consumer return: 200 OK
'''

#函数式
#lambda 传入参数:方法并输出
a = map(lambda x:x*2,[1,2,3])#[2, 4, 6]
print a
a = [1,2,3,4,5,6,7]
b = filter(lambda x: x > 5, a)
print b#[6, 7]

#深浅拷贝
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
e=a[:]#切片,相当于浅拷贝
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝

a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象

print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
print 'e = ', e
'''
copy会对原对象拷贝,但不会递归深拷贝,而deepcopy是递归深拷贝的,这么一来copy是介于=和deepcopy的,用的肯定不多。
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
e = [1, 2, 3, 4, ['a', 'b', 'c']]
'''

#is是对比地址,==是对比值

#read,readlin,readlines
f=open('data.txt','r')
r1=f.read()
print 'r1:',r1
f.close

f=open('data.txt','r')
for i in f:
  print 'r1.5:',i
f.close

f=open('data.txt','r')
r2=f.readline()
'''
while r2:
print 'r2:',r2
r2=f.readline()
'''
print 'r2',r2
f.close

f=open('data.txt','r')
r3=f.readlines()
print "r3:",r3
f.close
'''
r1: fafafadgdsgsd
fafasfhbafafn
fmghkgk'mf,df;m
sdgknsdjvafoilnvaov
sdnvjsavnas;vn

r1.5: fafafadgdsgsd

r1.5: fafasfhbafafn

r1.5: fmghkgk'mf,df;m

r1.5: sdgknsdjvafoilnvaov

r1.5: sdnvjsavnas;vn

r2 fafafadgdsgsd

r3: ['fafafadgdsgsd\n', 'fafasfhbafafn\n', "fmghkgk'mf,df;m\n", 'sdgknsdjvafoilnvaov\n', 'sdnvjsavnas;vn\n']
'''

#正则
import re
f=open('order.txt','r')
text=f.read()
pattern=re.compile('HK/(.*?)/')
print re.findall(pattern,text)#['NI1234567890', 'NI1234567890']
f.close()

感觉总结了一切python常见知识点,可直接运行版本的更多相关文章

  1. python常见排序算法解析

    python——常见排序算法解析   算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...

  2. 最全Python基础知识点梳理

    本文主要介绍一些平时经常会用到的python基础知识点,用于加深印象,也算是对于学习这门语言的一个总结与回顾.python的详细语法介绍可以查看官方编程手册,也有一些在线网站可以学习 python语言 ...

  3. iOS 常见知识点(三):Lock

    iOS 常见知识点(一):Runtime iOS 常见知识点(二):RunLoop 锁是最常用的同步工具.一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简单 ...

  4. Python常见的错误汇总

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应 ...

  5. HTML+CSS+js常见知识点

    一.HTML.CSS常见知识点 1.垂直居中盒子 /* 方法一 */ html, body { width: 100%; height: 100%; padding: 0; margin: 0; } ...

  6. python 类知识点总结

    python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...

  7. python Django知识点总结

    python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...

  8. Python常见十六个错误集合,你知道那些?

    使用python会出现各种各样的错误,以下是Python常见的错误以及解决方法. 1.ValueError: 'Conv2d_1a_3×3' is not a valid scope name 这个是 ...

  9. Python 常见文件操作的函数示例(转)

    转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...

随机推荐

  1. cascade rcnn

    在region proposal阶段采用不同的iou. 第一幅图,不同颜色的线是用不同的region proposal的iou阈值,横坐标是region proposal生成的框与gt的原始iou,纵 ...

  2. generator 函数

    可以看做一个状态机, 生成的是一个迭代器对象, 可以用来遍历状态机里面的各种状态 创建方式 在函数名前面添加 * , 内部使用 yeild 来标注状态 特性 yield 只能在 generator 中 ...

  3. 在Mac机器上给ITerm2配置lrzsz,便捷的传输文件到远程服务器上

    可直接参考文档:http://danqingdani.blog.163.com/blog/static/18609419520141201215750 需要使用到的github脚本:https://g ...

  4. Andorid进阶7—— Ant自动编译打包&发布 android项目

    http://www.cnblogs.com/tt_mc/p/3891546.html Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Ecl ...

  5. Java实现 lower_bound() 和 upper_bound()

    Java实现 lower_bound() 和 upper_bound() lower_bound() 函数 lower_bound() 在 [begin, end) 进行二分查找,返回 大于或等于 t ...

  6. Jquery Mobile通过超链接跳转后CSS样式不起作用的解决办法

    Jquery Mobile中的超链接默认是采用AJAX跳转的,ajax获取到页面的内容之后,就直接替换当前页面的内容了,它只是单纯的获取页面的HTML代码,并不会再去下载引用的CSS代码和JS代码,因 ...

  7. Python 学习笔记(九)Python元组和字典(一)

    Python 元组 元组的定义  元组(tuple)是一种Python对象类型,元组也是一种序列 Python中的元组与列表类似,不同之处元组的元素不能修改 元组使用小括号,列表使用方括号 元组的创建 ...

  8. 09 OCP知识点讲解 之 LRU链与脏LRU链

    OCP知识点讲解 之 LRU链与脏LRU链 分类: Oracle 2012-06-30 10:49:26   一.LRU链: 任何缓存的大小都是有限制的,并且总不如被缓存的数据多.就像Buffer c ...

  9. python打印99乘法表

    代码如下: print(XXX,end="\t") #表示打印不换行 附带python部分转义字符:

  10. 纯JS实现前端动态分页码

    思路分析:有3种情况 第一种情况,当前页面curPage < 4 第二种情况,当前页面curPage == 4 第三种情况,当前页面curPage>4 此外,还要考虑,当前页码 curPa ...