python相关知识点

1、os.path在不同的环境中设置文件的路径时作用非常大:

常用方法作用
os.path.dirname(__file__)返回当前python执行脚本的执行路径(看下面的例子),这里__file__为固定参数
os.path.abspath(file)返回一个文件在当前环境中的绝对路径,这里file 一参数
os.path.join(basedir,file)将file文件的路径设置为basedir所在的路径,这里fbasedir和file都为参数

2、函数调用时带括号和不带括号的区别:

如函数:

#python3.5

 def a(x):
      return x

print(a)    #不带括号调用的结果:<function a at 0x1091766a8>
print(a(3)) #带括号调用的结果:3

1、不带括号时,调用的是这个函数本身
2、带括号(此时必须传入需要的参数),调用的是函数的return结果

3、cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等。而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复。在cPickle中,主要有四个函数可以做这一工作,下面使用例子来介绍。

dump: 将python对象序列化保存到本地的文件。

>>> import cPickle

>>> data = range(1000)

>>> cPickle.dump(data,open("test\\data.pkl","wb"))

dump函数需要指定两个参数,第一个是需要序列化的python对象名称,第二个是本地的文件,需要注意的是,在这里需要使用open函数打开一个文件,并指定“写”操作。

load:载入本地文件,恢复python对象

>>> data = cPickle.load(open("test\\data.pkl","rb"))

同dump一样,这里需要使用open函数打开本地的一个文件,并指定“读”操作

dumps:将python对象序列化保存到一个字符串变量中。

>>> data_string = cPickle.dumps(data)

loads:从字符串变量中载入python对象

>>> data = cPickle.loads(data_string)

4、python中read() readline()以及readlines()用法

我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法: .read()、.readline() 和 .readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。 .read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 .read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。.readline() 和 .readlines() 之间的差异是后者一次读取整个文件,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。另一方面,.readline() 每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()。

5、python-enumerate枚举函数

enumerate 函数用于遍历序列中的元素以及它们的下标:

>>> for i,j in enumerate(('a','b','c')):
 print i,j

0 a
1 b
2 c

>>> for i,j in enumerate([1,2,3]):
 print i,j

0 1
1 2
2 3

6、lambda是什么?
 g = lambda x:x+1

看一下执行的结果: 

  g(1)

  >>>2

  g(2)

  >>>3

当然,你也可以这样使用:

  lambda x:x+1(1)

  >>>2   

可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:

1 def g(x):
2     return x+1

非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。

Python中,也有几个定义好的全局函数方便使用的,filter, map, reduce 

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>>
>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]
>>>
>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
>>>
>>> print reduce(lambda x, y: x + y, foo)

139

lambda 定义了一个匿名函数

lambda 并不会带来程序运行效率的提高,只会使代码更简洁。

如果使用lambda,lambda内不要包含循环,如果有,最好定义函数来完成,使代码获得可重用性和更好的可读性。

7、dict()的操作方法
dict的很多方法跟list有类似的地方,下面一一道来,并且会跟list做一个对比

嵌套

嵌套在list中也存在,就是元素是list,在dict中,也有类似的样式:

>>> a_list = [[ 1 , 2 , 3 ],[ 4 , 5 ],[ 6 , 7 ]]
>>> a_list[ 1 ][ 1 ]
5
>>> a_dict = { 1 :{ "name" : "qiwsir" }, 2 : "python" , "email" : "qiwsir@gmail.com" }
>>> a_dict
{ 1 : { 'name' : 'qiwsir' }, 2 : 'python' , 'email' : 'qiwsir@gmail.com' }
>>> a_dict[ 1 ][ 'name' #一个嵌套的dict访问其值的方法:一层一层地写出键
'qiwsir'

获取键、值

在上一讲中,已经知道可以通过dict的键得到其值。例上面的例子。

>>> website = { 1 : "google" , "second" : "baidu" , 3 : "facebook" , "twitter" : 4 }
 
>>> #用d.keys()的方法得到dict的所有键,结果是list
>>> website.keys()
[ 1 , 'second' , 3 , 'twitter' ]
 
>>> #用d.values()的方法得到dict的所有值,如果里面没有嵌套别的dict,结果是list
>>> website.values()
[ 'google' , 'baidu' , 'facebook' , 4 ]
 
>>> #用items()的方法得到了一组一组的键值对,
>>> #结果是list,只不过list里面的元素是元组
>>> website.items()
[( 1 , 'google' ), ( 'second' , 'baidu' ), ( 3 , 'facebook' ), ( 'twitter' , 4 )]

从上面的结果中,我们就可以看出,还可以用for语句循环得到相应内容。例如:

>>> for key in website.keys():
...   print key, type (key)
...
1 < type 'int' >
second < type 'str' >
3 < type 'int' >
twitter < type 'str' >
 
>>> #下面的方法和上面的方法是一样的
>>> for key in website:
...   print key, type (key)
...
1 < type 'int' >
second < type 'str' >
3 < type 'int' >
twitter < type 'str' >

以下两种方法等效:

>>> for value in website.values():
...   print value
...
google
baidu
facebook
4
 
>>> for key in website:
...   print website[key]
...
google
baidu
facebook
4
下面的方法又是等效的:

>>> for k,v in website.items():
...   print str (k) + ":" + str (v)
...
1 :google
second:baidu
3 :facebook
twitter: 4
 
>>> for k in website:
...   print str (k) + ":" + str (website[k])
...
1 :google
second:baidu
3 :facebook
twitter: 4
下面的方法也能得到键值,不过似乎要多敲键盘

>>> website
{ 1 : 'google' , 'second' : 'baidu' , 3 : 'facebook' , 'twitter' : 4 }
>>> website.get( 1 )  
'google'
>>> website.get( "second" )
'baidu'

其它几种常用方法

>>> len (website)
4
>>> website
{ 1 : 'google' , 'second' : 'baidu' , 3 : 'facebook' , 'twitter' : 4 }
 
>>> new_web = website.copy()  #拷贝一份,这个拷贝也叫做浅拷贝,对应着还有深拷贝。
>>> new_web           #两者区别,可以google一下。
{ 1 : 'google' , 'second' : 'baidu' , 3 : 'facebook' , 'twitter' : 4 }

删除键值对的方法有两个,但是两者有一点区别

>>> #d.pop(key),根据key删除相应的键值对,并返回该值
>>> new_web.pop( 'second' )
'baidu'
 
>>> del new_web[ 3 ]   #没有返回值,如果删除键不存在,返回错误
>>> new_web
{ 1 : 'google' , 'twitter' : 4 }
>>> del new_web[ 9 ]
Traceback (most recent call last):
File "<stdin>" , line 1 , in <module>
KeyError: 9

用d.update(d2)可以把d2合并到d中。

>>> cnweb
{ 'qq' : 'first in cn' , 'python' : 'qiwsir.github.io' , 'alibaba' : 'Business' }
>>> website
{ 1 : 'google' , 'second' : 'baidu' , 3 : 'facebook' , 'twitter' : 4 }
 
>>> website.update(cnweb)  #把cnweb合并到website内
>>> website         #变化了
{ 'qq' : 'first in cn' , 1 : 'google' , 'second' : 'baidu' , 3 : 'facebook' , 'python' : 'qiwsir.github.io' , 'twitter' : 4 , 'alibaba' : 'Business' }
>>> cnweb          #not changed
{ 'qq' : 'first in cn' , 'python' : 'qiwsir.github.io' , 'alibaba' : 'Business' }

8、Python中没有专门定义结构体的方法,但可以使用class标记定义类来代替结构体,
其成员可以在构造函数__init__中定义,具体方法如下。

class item:
    def __init__(self):
        self.name = ''     # 名称
        self.size = 10     # 尺寸
        self.list = []     # 列表

a = item() # 定义结构对象
a.name = 'cup'
a.size = 8
a.list.append('water')




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值