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.定时自动更新服务区时间,使 ...
随机推荐
- 10,随机等概率的输出m个不重复的数
今天看到一段代码,可以从0.....n-1中随机等概率的输出m个不重复的数(n远远大于m).遂记录下来. 首先,产生随机数,不免要用到srand,rand函数.先简单介绍下两个函数. 1,void s ...
- LintCode- 删除排序数组中的重复数字
题目描述: 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 样例 给出数组A =[1,1 ...
- JavaScript中的鼠标滚轮事件详解
JavaScript中的鼠标滚轮事件详解/*Firefox注册事件*/ ~~~Firefox: addEventListener('DOMMouseScroll', handler, false)if ...
- LED板上芯片(COB)封装流程
LED 板上芯片(Chip On Board,COB)封装流程是,首先在基底表面用导热环氧树脂(一般用掺银颗粒的环氧树脂)覆盖硅片安放点, 然后将硅片 间接安放正在基底表面,热处理至硅片牢固地固定正在 ...
- HDU 2215 Maple trees
增量法的最小包围圈算法,不会…… #include <cstdio> #include <cstring> #include <iostream> #include ...
- maven 添加自己的包
mvn install:install-file -Dfile=d:/flea.jar -DgroupId=com.flea.bussiness -DartifactId=flea -Dversion ...
- 黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sS ...
- swift3.0 hello swift(1)
一直对swift感兴趣,在前段时间的新闻中,大多是swift3.0发布和xcode8.0的改进,因为改动比较大,以前使用swift2.x做项目的人,都在担心其项目从2.x迁移到3.0+的问题.以前简单 ...
- srm 534
250 Description 给你一个1*n的棋盘.两人轮流行动,每一个人能够把"o"向右移动到空格子.或者跨越连续两个"o"到空格子. 一个"o& ...
- Bitmap recycle()
Bitmap调用recycle? When? Bitmap有一个recycle方法,意思非常easy,回收Bitmap的空间. Q 1: Bitmap是否有调用recycle方法的必要性? A: 嵌入 ...