一、编码总结

"""
python2
文件存储默认是ascii方式,启动加#coding:utf8就是文件以utf8方式打开.否则就是以ascii.变量则是str. 例子:
name='中国'
print(name.decode('utf-8').encode('gbk'))
#name.decode('utf-8') 意思是:name是UTF8格式先解码成Unicode.注意utf-8这里的意思,原字符(name)是utf8.
#encode('gbk') 意思是:转码成gbk.
#注意:str = bytes这两个在python2是一样的。 python3
文件存储默认是utf8方式,打开文件也是UTF8.变量则是unicode.注意python3中没有decode. 例子:
name='中国'
print(name.encode('gbk'))
str = unicode
bytes = python2的bytes(二进制表现形式)
"""

二、装饰器

  http://www.cnblogs.com/linhaifeng/articles/6140395.html

  装饰器=高阶函数+函数嵌套+闭包

 """
  前言:
    高阶函数:
      (1).函数接收的参数是一个函数名       (2).函数的返回值是一个函数名       (3).满足上述条件任意一个,都可称之为高阶函数
    函数嵌套:
      将函数中定义函数并调用。
    闭包:
      在一个作用域里放入定义变量,相当于打了一个包。
""" 

  1、闭包

def foo():
def bar():
print("xx")
return bar bar1 = foo()
bar1()

  2、基本装饰器

 def auth(func):
def wrapper():
print("in the wrapper,begin!")
func()
print("in the wrapper,stop!")
return wrapper @auth
def foo(): #注意:就相行于foo=auth(foo)
print("in the foo!") foo()

  3、带参数

 def auth(func):
def wrapper(*args, **kwargs): #接收万能参数
print("in the wrapper,begin!")
func(*args, **kwargs) #接收万能参数
print("in the wrapper,stop!")
return wrapper @auth
def foo(name):
print("in the foo! i am [%s]" % name) foo('tom')

  4、增加返回值

 def auth(func):
def wrapper(*args, **kwargs):
print("in the wrapper,begin!")
ret = func(*args, **kwargs) #在这里
print("in the wrapper,stop!")
return ret #在这里
return wrapper @auth
def foo(name):
print("in the foo! i am [%s]" % name)
return True #只在这里增加是不行的,返回None ret = foo('tom')
print(ret)
"""
重点:
1.*args,**kwargs万能传值.
2.返回值.
"""

  5、无参数装饰器和验证

 user_list = [
{'name': 'alex', 'passwd': ''},
{'name': 'linhaifeng', 'passwd': ''},
] current_user = {'username':None,'login':False} def auth(func):
def wrapper(*args, **kwargs):
if current_user['username'] and current_user['login']:
res = func(*args, **kwargs)
return res username = input("username>").strip()
password = input("password>").strip() for number, value in enumerate(user_list):
if value['name'] == username and value['passwd'] == password:
current_user['username'] = username
current_user['login'] = True
res = func(*args, **kwargs)
return res
break
else:
print("用户或许密码错误!")
return wrapper @auth
def index():
print('欢迎来到主页面') @auth
def home():
print('这里是你家') index()
home() #只输入一次验证

  6、有参数装饰器

user_list = [
{'name': 'alex', 'passwd': ''},
{'name': 'linhaifeng', 'passwd': ''},
] current_user = {'username':None,'login':False} def auth(auth_type='file'):
def inner(func):
def wrapper(*args, **kwargs):
if auth_type == 'file':
if current_user['username'] and current_user['login']:
res = func(*args, **kwargs)
return res username = input("username>").strip()
password = input("password>").strip() for number, value in enumerate(user_list):
if value['name'] == username and value['passwd'] == password:
current_user['username'] = username
current_user['login'] = True
res = func(*args, **kwargs)
return res
break
else:
print("用户或许密码错误!")
elif auth_type == 'ldap':
print("from ldap auth!")
res = func(*args, **kwargs)
return res
return wrapper
return inner """
#auth(auth_type='file')就是在运行一个函数,然后返回inner,所以@auth(auth_type='file')
#就相当于@inner,只不过现在,我们的inner作为一个闭包的应用,
#外层的包auth给它留了一个auth_type='file'参数
""" @auth(auth_type='file')
def index():
print('欢迎来到主页面') @auth(auth_type='ldap')
def home():
print('这里是你家') index()
home()

三、模块与包

  1.什么是模块:

    一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

  2.模块的命名空间:

每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,
与使用者的全局变量冲突

  3. from spam import *  在spam.py文件中可以使用__all__来控制*(用来发布新版本)

  4.重新加域模块

1 import time,importlib
2 import aa
3
4 time.sleep(20)
5 importlib.reload(aa)
6 aa.func1()

  5.if __name__ == "__main__":

    当test.py这个脚本当成脚本执行时python test.py这时,__name__就会等于__main__,如果被其它脚本import导入时,__name__则会等于"test")

  6.模块搜索路径:

    (1).先查找内建模块。

    (2).再去sys.path中给的路径列表中查找。

1 >>> import sys
2 >>> sys.path.append('/a/b/c/d')
3 >>> sys.path.insert(0,'/x/y/z') #排在前的目录,优先被搜索

  7.dir和内建函数

import builtins
dir(builtins)

  8.包结构

 glance/                   #Top-level package

 ├── __init__.py      #Initialize the glance package

 ├── api                  #Subpackage for api

 │   ├── __init__.py

 │   ├── policy.py

 │   └── versions.py

 ├── cmd                #Subpackage for cmd

 │   ├── __init__.py

 │   └── manage.py

 └── db                  #Subpackage for db

     ├── __init__.py

     └── models.py
 #文件内容

 #policy.py
def get():
print('from policy.py') #versions.py
def create_resource(conf):
print('from version.py: ',conf) #manage.py
def main():
print('from manage.py') #models.py
def register_models(engine):
print('from models.py: ',engine)

  (1).正确使用方法1:

 #外部调用
import sys
sys.path.append("day4") from glance.api import policy
policy.get() from glance.api.policy import get
get()

  (2).正确使用方法2:

#不推荐,默认不可以使用,仅仅是执行了api下面的__init__.py
#再得配置__all__=['policy',] 在__init__.py
#没有加入到__all__列表的则不能使用 vim glance/api/__init__.py
__all__ = ['policy',] from glance.api import *
policy.get()

  9.绝对导入和相对导入

在glance/api/version.py

#绝对导入
from glance.cmd import manage
manage.main() #相对导入
from ..cmd import manage
manage.main()

  10.切记:在"包"的概念中不要使用import , 使用from .. import ..

  11.直接import glance解决办法:

1 #glance/__init__.py
2 from . import cmd
3
4 #glance/cmd/__init__.py
5 from . import manage

  12.优秀程序常用

 import os
import sys
base_dir = os.path.normpath(os.path.join(os.path.abspath(__file__),
os.pardir, #上一级
os.pardir, #上一级,根据自己的需要来定。
))
sys.path.insert(0, base_dir)

python16_day04【编码、函数、装饰器、包】的更多相关文章

  1. Python--函数对象@命名空间与作用域@包函数@装饰器@迭代器@内置函数

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  2. Python: 无参数的函数装饰器

    写带参数的函数装饰器最纠结的是需要包好多层,最外层是接收参数的函数,它返回一个接收函数的的函数.但这样有个问题是,最终包装出来的装饰器必须加()调用一下,即使没有参数也需要这样做,因为调用这个最外层函 ...

  3. python装饰器1:函数装饰器详解

    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函 ...

  4. Python函数装饰器高级用法

    在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...

  5. 函数 装饰器 python

    今日内容概要 1.闭包函数 2.闭包函数的实际应用 3.装饰器简介(重点加难点) 4.简易版本装饰器 5.进阶版本装饰器 6.完整版本装饰器 7.装饰器模板(拷贝使用即可) 8.装饰器语法糖 9.装饰 ...

  6. Python高手之路【四】python函数装饰器

    def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...

  7. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  8. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  9. python 函数 装饰器 内置函数

    函数 装饰器 内置函数 一.命名空间和作用域 二.装饰器 1.无参数 2.函数有参数 3.函数动态参数 4.装饰器参数 三.内置函数 salaries={ 'egon':3000, 'alex':10 ...

  10. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

随机推荐

  1. VSCode 创建项目常用命令

    对 http://www.bkjia.com/Asp_Netjc/1233276.html 的补充 1. 创建HelloWorld.Solutions目录并且在此目录中创建sln解决方案 例:dotn ...

  2. 1年3年5年-我对PHP攻城师有看法

    今天早上公车上看微信拉勾的一些岗位推送,挑了几个PHP攻城师看看 15K-20K的 百万级网站架构经验 3年以上开发,至少1年互联网用户产品开团队开发经验 不低于百度T4水平 数据库规划和优化,熟悉常 ...

  3. quick-cocos2d-x 创建自定义lua绑定c++类

    内容主要参考 “在quick-cocos2d-x中添加自定义的类给lua使用” ( http://www.codeo4.cn/archives/746) 1. quick-coco2d-x 使用 to ...

  4. Expectation Maximization(EM)算法note

    EM算法,之前上模式识别课上,推导过,在<统计学习方法>中没耐性的看过几次,个人感觉讲的过于理论,当时没怎么看懂,后来学lda,想要自己实现一下em算法,又忘记了,看来还是学的不够仔细,认 ...

  5. 给jdk配置jvm的参数

    (1)window->preference->java->installed JREs ->edit  -Xms512m -Xmx512m -XX:MaxNewSize=512 ...

  6. win10执行shell脚本

    我们在win10如何执行以.sh文件的脚本呢? 开发步骤:1.写脚本b2q_goods.sh #!/bin/bashsql="select * from b2q.goods where go ...

  7. mfc小工具开发之定时闹钟之---时间获取和音频播放

    1.这里的音频文件是指*.wav格式的音频,参考了飞雪的音频文件,版本号: 飞雪桌面日历 v2.84.1025 绿色版 http://www.piaodown.com/down/soft/18512. ...

  8. 《转》openstack中删除虚拟主机,状态一直deleting

    一.我重新启动了该机器.之后想删除没有创建成功的虚拟机(没有打开cpu的vt).结果发现状态一直为deleting状态.在这个状态下创建虚拟机也失败. 二.分析:在/var/log/nova/nova ...

  9. Laravel5.1 登录和注册

    关于登录和注册 Laravel自带了一套组件实现了这一功能,我们只需要实现简单的视图即可. AuthController是专门管理用户注册和登录的. PassWordController是重置密码用的 ...

  10. 3969 [Mz]平方和【斐波那契平方和】

    3969 [Mz]平方和  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description 斐波那契数列:f[0 ...