python 基础2

一、作用域

对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用。

1
2
3
if  1 = = 1 :
     name  =  'wupeiqi'
print   name

下面的结论对吗?

外层变量,可以被内层变量使用
内层变量,无法被外层变量使用

二、三元运算

1
result  =  1  if  条件  else  2

如果条件为真:result = 值1
如果条件为假:result = 值2

三、进制

  • 二进制,01
  • 八进制,01234567
  • 十进制,0123456789
  • 十六进制,0123456789ABCDEF

Python基础

对于Python,一切事物都是对象,对象基于类创建

所以,以下这些值都是对象: "wupeiqi"、38、['北京', '上海', '深圳'],并且是根据不同的类生成的对象。

一、整数

如: 18、73、84

每一个整数都具备如下功能:

  int

二、长整型

可能如:2147483649、9223372036854775807

每个长整型都具备如下功能:

  long

三、浮点型

如:3.14、2.88

每个浮点型都具备如下功能:

  float

四、字符串

如:'wupeiqi'、'alex'

每个字符串都具备如下功能:

  str

注:编码;字符串的乘法;字符串和格式化

五、列表

如:[11,22,33]、['wupeiqi', 'alex']

每个列表都具备如下功能:

  list

注:排序;

六、元组

如:(11,22,33)、('wupeiqi', 'alex')

每个元组都具备如下功能:

  tuple

七、字典

如:{'name': 'wupeiqi', 'age': 18} 、{'host': '2.2.2.2', 'port': 80]}

ps:循环时,默认循环key

每个字典都具备如下功能:

  dict
1
2
3
练习:元素分类
有如下值集合 [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90. ..],将所有大于  66  的值保存至字典的第一个key中,将小于  66  的值保存至第二个key的值中。
即: { 'k1' : 大于 66  'k2' : 小于 66 }

 八、set集合

set是一个无序且不重复的元素集合

  set
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
练习:寻找差异
# 数据库中原有
old_dict  =  {
     "#1" :{  'hostname' :c1,  'cpu_count' 2 'mem_capicity' 80  },
     "#2" :{  'hostname' :c1,  'cpu_count' 2 'mem_capicity' 80  }
     "#3" :{  'hostname' :c1,  'cpu_count' 2 'mem_capicity' 80  }
}
 
# cmdb 新汇报的数据
new_dict  =  {
     "#1" :{  'hostname' :c1,  'cpu_count' 2 'mem_capicity' 800  },
     "#3" :{  'hostname' :c1,  'cpu_count' 2 'mem_capicity' 80  }
     "#4" :{  'hostname' :c2,  'cpu_count' 2 'mem_capicity' 80  }
}
 
需要删除:?
需要新建:?
需要更新:? 注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新
复制代码
old_set = set(old_dict.keys())
update_list = list(old_set.intersection(new_dict.keys()))

new_list = []
del_list = []

for i in new_dict.keys():
    if i not in update_list:
        new_list.append(i)

for i in old_dict.keys():
    if i not in update_list:
        del_list.append(i)

print update_list,new_list,del_list
复制代码
 

九、collection系列

1、计数器(counter)

Counter是对字典类型的补充,用于追踪值的出现次数。

ps:具备字典的所有功能 + 自己的功能

1
2
3
=  Counter( 'abcdeabcdabcaba' )
print  c
输出:Counter({ 'a' 5 'b' 4 'c' 3 'd' 2 'e' 1 })
  Counter

2、有序字典(orderedDict )

orderdDict是对字典类型的补充,他记住了字典元素添加的顺序

  OrderedDict

3、默认字典(defaultdict) 

学前需求:

1
2
有如下值集合 [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90. ..],将所有大于  66  的值保存至字典的第一个key中,将小于  66  的值保存至第二个key的值中。
即: { 'k1' : 大于 66  'k2' : 小于 66 }
  原生字典解决方法
复制代码
from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)

for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)
复制代码

defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。

  defaultdict

4、可命名元组(namedtuple) 

根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型。

1
2
3
import  collections
 
Mytuple  =  collections.namedtuple( 'Mytuple' ,[ 'x' 'y' 'z' ])
  Mytuple

5、双向队列(deque)

一个线程安全的双向队列

  deque

注:既然有双向队列,也有单项队列(先进先出 FIFO )

  Queue.Queue

迭代器和生成器

一、迭代器

对于Python 列表的 for 循环,他的内部原理:查看下一个元素是否存在,如果存在,则取出,如果不存在,则报异常 StopIteration。(python内部对异常已处理)

  listiterator

二、生成器

range不是生成器 和 xrange 是生成器

readlines不是生成器 和 xreadlines 是生成器

1
2
3
4
>>>  print  range ( 10 )
[ 0 1 2 3 4 5 6 7 8 9 ]
>>>  print  xrange ( 10 )
xrange ( 10 )

生成器内部基于yield创建,即:对于生成器只有使用时才创建,从而不避免内存浪费

1
2
3
4
5
6
7
8
9
10
11
练习:<br>有如下列表:
     [ 13 22 6 99 11 ]
 
请按照一下规则计算:
13  和  22  比较,将大的值放在右侧,即:[ 13 22 6 99 11 ]
22  和  6  比较,将大的值放在右侧,即:[ 13 6 22 99 11 ]
22  和  99  比较,将大的值放在右侧,即:[ 13 6 22 99 11 ]
99  和  42  比较,将大的值放在右侧,即:[ 13 6 22 11 99 ,]
 
13  和  6  比较,将大的值放在右侧,即:[ 6 13 22 11 99 ,]
...
  Demo

深浅拷贝

为什么要拷贝?

1
当进行修改时,想要保留原来的数据和修改后的数据

数字字符串 和 集合 在修改时的差异? (深浅拷贝不同的终极原因)

1
2
3
在修改数据时:
     数字字符串:在内存中新建一份数据
          集合:修改内存中的同一份数据

对于集合,如何保留其修改前和修改后的数据?

1
在内存中拷贝一份

对于集合,如何拷贝其n层元素同时拷贝?



自:http://www.cnblogs.com/wupeiqi/articles/4911365.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值