Python基础1:一些小知识汇总
一、#!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:一些小知识汇总的更多相关文章
- python之数字类型小知识
数字是表示计数的抽象事物,也是数学运算和推理的基础,所以,生活中数字是生活中无处不在的,那么,在python语言中运用数字有哪些小知识呢,不妨花点时间看一下这篇博文,牢记这些小知识. 整数类型中四种进 ...
- python中的一些小知识
在最近学习python中遇到的一些小问题汇总一下: 1.在windows7下安装python3.5版本时提示安装不了,缺少ServicePack1. 解决办法是,打开控制面板\系统和安全\Windo ...
- Python 基础:入门必备知识
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:程序员野客 先看下咱们的基础目录1 标识符2 关键字3 引号4 编码5 ...
- 【python基础】 Tkinter小构件之canvas 画布
[python之tkinter画布] 要画布就要使用tkinter的小构件,canvas(结构化的图形,用于绘制图形,创建图形编辑器以及实现自定制的小构件类) 我们先使用create_rectangl ...
- C语言中重要的小知识汇总
用于整理记录一些C语言下的小知识点: 1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节: ...
- Python时间获取及转换知识汇总
时间处理是我们日常开发中最最常见的需求,例如:获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个datetime的时间 ...
- python基础17 ---继承补充知识
一.继承的顺序 1.在python中的类可以集成多个类,既然是继承多个类就有类的寻找顺序这么一说.其寻找方法就有广度优先和深度优先两种. 2.当类是新式类,多继承的情况下会按照广度优先的顺序查找. 如 ...
- python基础4(小数据池,编码,深浅拷贝)
1.==与is == 比较值是否相等 is比较内存地址是否相同 2.小数据池 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址 数字范围:-5 ~ 256 num ...
- linux系统基础优化16条知识汇总
优化的总结: 1.不用root管理,以普通用户的名义通过sudo授权管理. 2.更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至 要更改只监听内网IP. 3.定时自动更新服务区时间,使 ...
随机推荐
- JS性能
获取以下属性 会等待对应元素渲染完成 才继续执行 * offsetTop, offsetLeft, offsetWidth, offsetHeight* scrollTop, scrollLeft ...
- 为什么Lisp没有流行起来
很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面.现在,它很少被用到,这一切并不是因为古老,类似古老的语言却被广泛应用.其他类似的古老的语言有??FORTRAN. COBOL. L ...
- Android studio如何使用SVN进行版本控制?
通过这两天对Android Studio的研究,终于搞通了Android Studio的基本操作及与SVN的相关关联操作(这样才能在公司的开发工作中使用):Google年底将会停止ADT插件的更新和支 ...
- 发一个讨论帖,如果结果被采纳的话可以给一份adb 代码,以及我封装的ADBLIB
如何在手机没有root 的情况下,获取系统的一些文件,比如 /data/data/xxxx 目录下的文件. 有任何想法的请说出来.
- VC++6.0中各种文件的作用
VC++ 6.0是一款很经典的C/C++开发工具,虽然是1998年的东西了,但是现在使用依然很广!在用它开发的时候,会发现在建立的工程的文件夹里面,有很多文件,各种后缀名.在这里呢,我主要说一下各个文 ...
- Cloud Foundry warden container 安全性探讨
本文将从Cloud Foundry中warden container的几个方面探讨warden container的安全性. 1. warden container互訪 1.1. 互訪原理· 在Cl ...
- Android的重力传感器(3轴加速度传感器)简单实例
重力感应主要是依靠手机的加速度传感器(accelerometer)来实现 在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器.因为很多功能用户根本不care的所以可能开发商会 ...
- 各浏览器对 window.open() 的窗口特征 sFeatures 参数支持程度存在差异
标准参考 无. 问题描述 使用 window.open 方法可以弹出一个新窗口,其中 open 方法的 sFeatures 参数选项在各浏览器中支持程度不一,这有可能导致同样的代码使各浏览器中弹出窗口 ...
- 原生JS实现字符串分割
window.onload = function(){ var str = 'abc,dbc,qqq,aaa'; var sp = split(str,',')//与字符串的分隔符要一直. alert ...
- C#中常量\枚举\结构及数组的运用
又一天结束了,今天在云和学院学习的知识下面继续来做总结. 一.常量\枚举\结构的运用 理论: 常量:const 类型 常量名 = 常量值 确定数量.确定值的几个取值:东西南北.男女.上中下. 枚举: ...