1、extend 和 append区别

extend 和 append区别
#extend接受list参数,添加每个元素至原list尾端
>>> l=[1,2,3]
>>> id(l)
63475272
>>> l.extend(['a','b','c'])
>>> l
[1, 2, 3, 'a', 'b', 'c']
>>> id(l)
63475272 #append接受任何参数,独立追加至list尾端
>>> l=[1,2,3]
>>> id(l)
63473544
>>> l.append(['a','b','c'])
>>> l
[1, 2, 3, ['a', 'b', 'c']]
>>> id(l)
63473544
两函数过程不更改内存地址

2、关于range()的几点

函数原型:range(start, end, scan)
参数含义:start:计数从start开始。默认是从0开始。例如range(5)等价于range(0, 5); end:技术到end结束,但不包括end.例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 scan:每次跳跃的间距,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1,10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1,10,3))
[1, 4, 7]
>>> list(range(-4,4))
[-4, -3, -2, -1, 0, 1, 2, 3]
>>> list(range(4,-4)) #start→ end(默认)一定是数轴正向迭代,4正向无法到达-4,空集list。
[]
>>> list(range(4,-4,-1)) #scan负数表示反向迭代,于是可以实现。
[4, 3, 2, 1, 0, -1, -2, -3]
>>> list(range(4,-4,-2))
[4, 2, 0, -2]

3、关于for循环

  i、基本规则

for...in适用于任意 可迭代序列:list、tuple、str、range()..

<list>
for i in[1,2,3]:
print(i)
1
2
3 for programminglanguage in['c','java','python','PHP']:
   print(programminglanguage)
c
java
python
PHP <tuple>
for i in(1,2,3):
print(i)
1
2
3 <str>
for i in'abc':
print(i)
a
b
c <range>
for i in range(5):
print(i)
0
1
2
3
4

  有一种通过 “序列索引迭代”

 seq=['c','java','python','PHP']
for i in range(len(seq)): #通过len函数获取seq元素数量,带入range()函数就得到一个seq内元素数量的序列,它等同seq的索引
print(seq[i])

#试着写个范式
list=['obj1','obj2','obj3']  
for index in range(len(list)):
  print(list[index])

  ii 易错

for i in range(5):
print i
i += 2
print i
print '一轮结束'
#每次循环 i 都被从新赋值,而不是继承上轮 i 值。
while i < 5:  #while不会像for一样对i 重新赋值
    print i 
    i += 2 
    print i 
    print '一轮结束'

4、关于‘无返回’与‘原地址’不变的错误辨析。

 曾经在某博客上看过一段分析‘add函数给set添加元素,原set不变’的文字,虽然论述是对的,代码却很诡异(我不敢说它是错的,但我的理解和它不一样),由此也想起一个小问题。

1 a={'a','b','c','d'}
2 b=a.add('e')
3 c=a.add('a')
4 print(a,type(a))
5 print(b,type(b))
6
7 #运行结果
8 {'a', 'b', 'c', 'e', 'd'} <class 'set'> #在集合里添加一个元素,不生成新的集合。
9 None <class 'NoneType'>

以上是它给的证明add不会生成新集合的代码。对此我怎么看都觉的诡异,于是自己试下

 >>> a={'a','b','c','d'}
>>> a.add('e')
 >>> #此行应得a.add('e')这个操作的返回值,但add和append、pop、get等函数一样是没有返回值的,或者说它返回一个none. 你强行给它赋值给一个变量b,然后输出b,只能得到none. b并不是a的引用!我想此处原文作者犯了一个逻辑上的错误
>>> a
{'d', 'c', 'b', 'a', 'e'}

如果想证明原作者的论述,应该这样写

 >>> a={'a','b','c','d'}
>>> id(a)
36603944
>>> a.add('e')
>>> a
{'d', 'c', 'b', 'a', 'e'}
>>> id(a)    #通过验证add操作前后的a的地址来证明
36603944

我想原作者本意论述是没错的,但写的代码不能证明论点。

最新文章

  1. laravel安装
  2. POJ1753(位操作和枚举)
  3. 2015安徽省赛 G.你来擒孟获
  4. vCSA加域&amp;vcenter关联域&amp;设置管理员权限
  5. IOS开发之——类似微信摇一摇的功能实现
  6. 优秀前端工程师应该掌握的内容(转自:github)
  7. Bootstrap页面布局21 - BS对话框设计
  8. mysql怎么终止当前正在执行的sql语句
  9. How To Tune or Test PLSQL Code Performance in Oracle D2k Forms
  10. $parse/$eval和$observe/$watch如何区分
  11. WCF揭秘(一)——简单的WCF开发实例
  12. iOS 手动打造JSON Model转换库
  13. ios开发之xcode6中如何添加pch全局引用文件
  14. [转] JS运算符 &amp;&amp;和|| 及其优先级
  15. http://blog.csdn.net/baimafujinji/article/details/10931621
  16. 支付宝分库分表中间件--zdal简介
  17. ECMAScript 6 之 let 和 const 命令
  18. qml: 支持的基本类型
  19. spring boot整合JMS(ActiveMQ实现)
  20. [JS] ECMAScript 6 - Destructuring

热门文章

  1. Windows TAKEOWN &amp; ICACLS
  2. HDOJ 5387 Clock 水+模拟
  3. Java对话框总结
  4. Unity3D &amp;amp; C# 设计模式--23
  5. Python数据导入
  6. 逆向碰到3des分析
  7. 常用经典SQL语句大全完整版--详解+实例 《来自网络,很全没整理,寄存与此》
  8. BZOJ2038 小Z的袜子 (莫队算法)
  9. 常用开源&lt;监控软件&gt;介绍
  10. BADI FCODE(菜单) 增强