1.数据类型

字符串: ''或""表示单行,写三对符合表示多行, r'这种写法转义符不生效'

布尔值:True, False

空值: None

类型转换

print bool('True'), bool(), bool(), bool(''), bool(None)#True True False False False
print int('')+, str()+''#

内存模型

a = 'abc'       #内存创建变量a, 字符串'abc'
b = a #创建变量b, b指向a地址,也就是'abc'
a = 'xyz' #创建字符串'xyz',a指向‘xyz’
print b #b指针没变,所以还是‘abc’ a = {} #创建变量a,创建对象{},a指向{}
b = a #创建变量b, b指向a地址,也就是{}
a['a1'] = #修改a指向内容的数据
print b==a,b #b指针没变,所以内容跟a看到的一样
a = {} #重新创建对象{},a指向它,跟前一个不一样
a['a2'] = #修改新对象属性
print b==a,a,b #b还为原先的值,{'a1':},所以深拷贝可由此实现

参考:数据类型和变量

2.浅拷贝与深拷贝

可变对象:有多个属性的对象,如{},[],()

不可变对象:只有一个数据的对象,如‘abc’,1,True,None

# coding=utf-
#浅拷贝
a = [,,,,]
b = a
a.append('hello')
print a == b, a, b #深拷贝
from copy import copy
c = copy(a)
a.append('world')
print a == c, a, c #输出结果
True [, , , , , 'hello'] [, , , , , 'hello']
False [, , , , , 'hello', 'world'] [, , , , , 'hello']

=为浅拷贝,a跟b指向同一对象

copy.copy()为深拷贝,a跟b指向不同对象

参考:python的复制,深拷贝和浅拷贝的区别

3.函数

函数内存模型

# coding=utf-
a = abs #变量abs指向绝对值函数,a指向abs指向的地址
print a(-)
abs = #变量abs指向整数对象3
print a(-)
print abs(-) #再调就会报错,因为他已经不是绝对值函数了

函数返回多个值

实际上返回的是元组,python可以x,y=(1,2)这样赋值而已

def test1():
return ,
def test2():
return (,)
def test3():
return [,]
a, b = test1()
print a, b, type(test1())
a, b = test2()
print a, b, type(test2())
a, b = test3()
print a, b, type(test3()) #输出
<type 'tuple'>
<type 'tuple'>
<type 'list'>

默认参数

函数执行时,会先赋值必要参数,找不到就会抛异常结束,所以,默认参数必须写必要参数后面

默认参数为=号赋值,所以,会出现浅拷贝现象

def m_power(x, n=):
s =
while(n>):
s*=x
n-=
return s
print m_power()
print m_power(,)
print m_power(,n=) #输出

可变参数

接收(),[]

#可变参数函数手动实现
def test(nums):
sum =
for n in nums:
sum += n
return sum
print test([,,,,]) #可变参数
def test(*nums):#为什么此处重名没报错???
sum =
for n in nums:
sum += n
return sum
print test(,,,,)
nums = [,,,,]
print test(*nums) #输出

关键字参数

可传入任意参数,接收{}

#关键字参数手动实现
from copy import copy
def test2(props):
temp = copy(props)
temp['test_2'] =
return temp
kw = {'a':,'b':}
print test2(kw) #关键字参数
def test3(**props):
props['test_3'] =
return props
print test3(**kw)
print test3(a=,b=) #输出
{'a': , 'b': , 'test_2': }
{'a': , 'b': , 'test_3': }
{'a': , 'b': , 'test_3': }

命名关键字参数

python2不支持,略

4.函数递归

递归每种条件都有返回,并且在一定条件下能结束递归。

递归本身是堆栈调用,无法跳出递归或者堆栈过深会导致超过最大栈长度报错

尾递归调用:return a+add(a-1)为非尾递归,尾递归调用就会返回,只占用一个堆栈

尾递归详细见递归函数,有点没看懂

def add(a):
if a>:
return a+add(a-)
return
print add() #输出
55

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

循环

python:永远别写for循环???

demo1 for生成列表:

lista = [i for i in range()]
print lista
lista = [i for i in range(,,)]
print lista #输出结果
[, , , , , , , , , ]
[, , , , ]

demo2 遍历迭代器:

lista = [obj for obj in range(,,)]
for idx, obj in enumerate(lista):
print idx, obj
#输出

demo3 取得元素下标:

lista = [obj for obj in range(,,)]
for idx, obj in enumerate(lista):
if obj%==:
break
if obj%==:
continue
print idx, obj #输出

参考:函数的参数

python要点的更多相关文章

  1. python要点之III

    [python要点之III] 1.实现交换. 在C/C++中,交换两个变量,需要2个变量,tmp=x;x=y;y=tmp;. 在python中,交换两个变量可以这么写:x,y=y,x. 2.is&am ...

  2. python要点简要-一日精通python

    Python2.x是历史,Python3.x是这门语言的现在和未来.Python2和3大约90%的地方都很相似的. 1.注释 单行注释:在注释的前面输入#号,如下: # 这是一条注释 多行注释:使用三 ...

  3. Python要点总结,我使用了100个小例子!

  4. python要点记录

    1.字典:当存储的key数目在几万到几十万之间效率最高.

  5. 给Lisp程序员的Python简介

    给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...

  6. Python - References

    01 - Python文档 Python:https://www.python.org/ Documentation:https://docs.python.org/ Standard Library ...

  7. Python3学习策略

    自学Python要点 [来自:http://www.cnblogs.com/shsxt/p/9138950.html] 1.找一本浅显易懂,例程比较好的教程,从头到尾看下去. 不要看很多本,专注于一本 ...

  8. python学习第一课要点记录

    写在要点之前的一段话,留给将来的自己:第一次参加编程的培训班,很兴奋很激动,之前都是自己在网上找免费的视频来看,然后跟着写一些课程中的代码,都是照着模子写,没有自己过多的思考.感觉这样学不好,除了多写 ...

  9. 第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点 1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题

随机推荐

  1. LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)

    题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_ ...

  2. 自学华为IoT物联网_09 OceanConnect业务流程

    点击返回自学华为IoT物流网 自学华为IoT物联网_09 OceanConnect业务流程 1.  物流网重要的连个协议介绍 1.1  重要物联网协议介绍----MQTT MQTT(消息队列遥测传输) ...

  3. canvas路径剪切和判断是否在路径内

    1.剪切路径 clip() var ctx=mycanvas.getContext('2d'); ctx.beginPath(); // 建一个矩形路径 ctx.moveTo(20,10) ctx.l ...

  4. JMeter5.1企业级应用应用常用功能详解(含插件安装)

    apache jmeter是100%的java桌面应用程序,它被设计用来加载被测试软件功能特性.度量被测试软件的性能.jmeter可以模拟大量的服务器负载,并且jmeter提供图形化的性能分析. JM ...

  5. bzoj4481非诚勿扰(期望dp)

    有n个女性和n个男性.每个女性的如意郎君列表都是所有男性的一个子集,并且可能为空.如果列表非空,她们会在其中选择一个男性作为自己最终接受的对象.将“如意郎君列表”中的男性按照编号从小到大的顺序呈现给她 ...

  6. Linux包系列的知识(附:Ubuntu16.04升级到18.04的案例)

    Linux基础:https://www.cnblogs.com/dunitian/p/4822808.html#linux 之前看到朋友还动不动 apt-get update upgrade,就很纳闷 ...

  7. Lambda 表达式有何用处?如何使用?

    强烈推荐!!!   作者:Sevenvidia链接:https://www.zhihu.com/question/20125256/answer/324121308来源:知乎著作权归作者所有.商业转载 ...

  8. 详解python的垃圾回收机制

    python的垃圾回收机制 一.引子 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存空间给回收掉,而变量名是访问到变量值的唯一方式 ...

  9. Codeforces Round #529 (Div. 3) D. Circular Dance

    传送门 题意: 有 n 个孩子编号为 1~n ,绕着圣诞树 dance: 编号为 i 的孩子可以记住ai1,ai2两个小孩,ai1,ai2是 i 在顺时针方向的相邻的两个小孩,但ai1,ai2不一定是 ...

  10. 一个小误区 JS中的contains

    在Java语言中,contains可以用于判断str1是否包含str2 原生JS中是有contains方法的 但它并不是字符串方法,,仅用于判断DOM元素的包含关系,参数是Element类型 若要在J ...