一、#!usr/bin/env python

  脚本语言的第一行,指定执行脚本的解释器。

  #!/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;

  #!/usr/bin/env python 这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
    
  其语法规则是:

  1、必须是文件的第一行

  2、必须以#!开头

  3、/path/to/script/interpreter是脚本解释器的全路径名。

 例如:
#!/bin/sh shell脚本
#!/usr/bin/perl perl脚本
#!/usr/bin/python python脚本
#!/usr/bin/python3 python3脚本
#!/usr/bin/python2 python2脚本 另外,在指定解释器后,可以用#!coding = usf-8 来指定编码格式,这样在py文件中就可以写入中文注释或字符串。

二、__file__, __name__, __doc__属性

  1、__file__

  用来获得模块所在路径,得到的可能是相对路径或绝对路径。

  为了得到绝对路径,可以通过os.path.realpath(__file__)

  但是,在Python控制台下,直接使用print __file__是会导致  name ‘__file__’ is not defined错误的,因为这时没有在任何一个脚本下执行,自然没有 __file__的定义了。不过,在wing下的python shell中print __file__ ,会得到_sandbox.py的路径。如下图所示:

  

    

  sys.argv[0]是获取文件路径的另一种方式。

 import os, sys
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
print "running from", dirname
print "file is", filename

  不过,__file__与sys.argv[0]的区别在于:当一个文件访问另一个文件时,__file__显示的路径不同,sys.argv[0]显示的路径相同。表述的不是很清楚,见例子:

 #f:\Python\Wing\Pygame\Bunny and Badgers\test.py
import sys, os
print "test: sys.argv[0] is", repr(sys.argv[0])
print "test: __file__ is", repr(__file__)
print "test: cwd is", repr(os.getcwd())
import pathutils
pathutils.show_path() #D:\Program Files\Python27\pathutils.py
import os, sys
def show_path():
print "show_path: sys.argv[0] is", repr(sys.argv[0])
print "show_path: __file__ is", repr(__file__)
print "show_path: cwd is", repr(os.getcwd()) #the output
test: sys.argv[0] is 'f:\\Python\\Wing\\Pygame\\Bunny and Badgers\\test.py'
test: __file__ is 'f:\\Python\\Wing\\Pygame\\Bunny and Badgers\\test.py'
test: cwd is 'f:\\Python\\Wing\\Pygame\\Bunny and Badgers'
show_path: sys.argv[0] is 'f:\\Python\\Wing\\Pygame\\Bunny and Badgers\\test.py'
show_path: __file__ is 'D:\\Program Files\\Python27\\pathutils.py'
show_path: cwd is 'f:\\Python\\Wing\\Pygame\\Bunny and Badgers'

  2、__name__

  用于判断当前模块是不是程序入口,如果当前程序正在使用,__name__的值为__main__。在编写程序时,通常需要给每个模块添加条件语句,用于单独测试该模块的功能。

  3、__doc__

  每个对象都有一个__doc__属性。

 class Person:
'''print __doc__ will be displaied ....
hahah
heheh
'''
def __init__(self, name, age):
self.name = name
self.age = age
bob = Person('bob', 18)
print Person.__doc__
print bob.__doc__ '''
print __doc__ will be displaied ....
hahah
heheh print __doc__ will be displaied ....
hahah
heheh
'''

三、隐含参数*args,**kwargs

  直接用代码体现吧  

 def foo(*args,**kwargs):
print 'args=',args
print 'kwargs=',kwargs
print '**********************'
#if __name__=='__main__':
foo(1,2,3)
foo(a=1,b=2,c=3)
foo(1,2,3,a=1,b=2,c=3)
foo(1,'b','c',a=1,b='b',c='c') def foo2(**kwargs):
for item in kwargs.items():
print item,
my_dict = {'name': 'yy', 'age': 18}
foo2(**my_dict) # '**' is must added

四、yield

  感觉yield是python特有的一个特性吧,用在生成器函数中。在python documention中有这样的描述,The yield expression is only used when defining a generator function, and can only be used in the body of a function definition. Using a yield expression in a function definition is sufficient to cause that definition to create a generator function instead of a normal function.

  而且,官方给出的例子很好的说明了yield的用法。

 def echo(value=None):
print "Excution starts when 'next()' is called for the first time"
try:
while True:
try:
value = (yield value)
except Exception, e:
value = e
finally:
print "Don't forget to clean up when 'close() is called.'" generator = echo(1)
print type(generator)
print generator.next()
print generator.next()
print generator.send(2)
print generator.throw(TypeError, "spam")
print generator.send("Does this work?")
generator.close()
 def myReadlines():
seek = 0
while True:
with open('C:\Users\Administrator\Desktop\interface.txt', 'r' ) as f:
f.seek(seek)
data = f.readline()
if data:
yield data
seek = f.tell()
else:
return for item in myReadlines():
print item

五、lambda表达式

  lambda表达式相当于一个没有函数名的函数。当函数功能较简单,而不想声明一个函数时,可以用lambda表达式代替。上代码吧。

 #example1
value = lambda x, y:x > y
print value(4, 6) #example2
map( lambda x: x*x, [y for y in range(10)] )

六、反射

  简单的说,就是以字符创的形式导入模块。__import__, getattr().

  第一次写博客,感觉挺好,以后就以这样的形式督促自己学习。反射机制下次再总结了,回去跑步。

  2016-03-26  21:07:00

												

Python基础1:一些小知识汇总的更多相关文章

  1. python之数字类型小知识

    数字是表示计数的抽象事物,也是数学运算和推理的基础,所以,生活中数字是生活中无处不在的,那么,在python语言中运用数字有哪些小知识呢,不妨花点时间看一下这篇博文,牢记这些小知识. 整数类型中四种进 ...

  2. python中的一些小知识

    在最近学习python中遇到的一些小问题汇总一下: 1.在windows7下安装python3.5版本时提示安装不了,缺少ServicePack1.  解决办法是,打开控制面板\系统和安全\Windo ...

  3. Python 基础:入门必备知识

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:程序员野客 先看下咱们的基础目录1 标识符2 关键字3 引号4 编码5 ...

  4. 【python基础】 Tkinter小构件之canvas 画布

    [python之tkinter画布] 要画布就要使用tkinter的小构件,canvas(结构化的图形,用于绘制图形,创建图形编辑器以及实现自定制的小构件类) 我们先使用create_rectangl ...

  5. C语言中重要的小知识汇总

    用于整理记录一些C语言下的小知识点: 1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节: ...

  6. Python时间获取及转换知识汇总

    时间处理是我们日常开发中最最常见的需求,例如:获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个datetime的时间 ...

  7. python基础17 ---继承补充知识

    一.继承的顺序 1.在python中的类可以集成多个类,既然是继承多个类就有类的寻找顺序这么一说.其寻找方法就有广度优先和深度优先两种. 2.当类是新式类,多继承的情况下会按照广度优先的顺序查找. 如 ...

  8. python基础4(小数据池,编码,深浅拷贝)

    1.==与is == 比较值是否相等 is比较内存地址是否相同 2.小数据池 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址 数字范围:-5 ~ 256 num ...

  9. linux系统基础优化16条知识汇总

    优化的总结: 1.不用root管理,以普通用户的名义通过sudo授权管理. 2.更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至 要更改只监听内网IP. 3.定时自动更新服务区时间,使 ...

随机推荐

  1. selenium 学习笔记 ---新手学习记录(10) 问题总结(java)--poi--excel 操作

    1.当我使用poi想要操作xlsx时,报错,解决方法下载xmlbeans-2.6.0.jar架包,引入即可.点我下载 https://yunpan.cn/cSdVqp6e4v6Jk  访问密码 2c5 ...

  2. document.createElement在IE和Firefox下的差异

    IE有3种方式都可以创建一个元素: 1 document.createElement("<input type=text>") 2 document.createEle ...

  3. 为什么webview.loadUrl("javascript:function() ")不执行?

    这几天搞webview 但是常常有时候会出现webview.loadurl 没有反映的情况对现在的分析如下: 情况一:webview.loadurl 的加载是在另一个线程中执行必须要在webview加 ...

  4. leetcode_question_67 Add Binary

    Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...

  5. 利用copy函数简单快速输出/保存vector向量容器中的数据

    如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...

  6. uestc 250 数位dp(水)

    /* 数位dp 水题 开两维一个记录长度,一个记录上一个数 */ #include<stdio.h> #include<string.h> #define N 13 int d ...

  7. Webstorm入门-----常用快捷键

    为了提高敲代码的速度.我们所需要关注的各种快捷键: 首先,快捷键的设置                  相关连接: http://www.cnblogs.com/dc10101/archive/20 ...

  8. Enze Second day

    哈喽,很高兴在云和学院又学了一天的新知识,现在,我来继续总结一下今天所学的以及对昨天的一些补充. 变量 • 声明变量的语法格式: –数据类型  变量名; •赋值:     变量名=值; 变量的命名 • ...

  9. Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)

    Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是c ...

  10. C++对C语言的非面向对象特性扩充(2)

    上一篇随笔写了关于C++在注释,输入输出,局部变量说明的扩充,以及const修饰符与C中的#define的比较,也得到了几位学习C++朋友们的帮助讲解,十分感谢,我也希望欢迎有更多学习C++的朋友一起 ...