python要点
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指向不同对象
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
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
循环
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要点的更多相关文章
- python要点之III
[python要点之III] 1.实现交换. 在C/C++中,交换两个变量,需要2个变量,tmp=x;x=y;y=tmp;. 在python中,交换两个变量可以这么写:x,y=y,x. 2.is&am ...
- python要点简要-一日精通python
Python2.x是历史,Python3.x是这门语言的现在和未来.Python2和3大约90%的地方都很相似的. 1.注释 单行注释:在注释的前面输入#号,如下: # 这是一条注释 多行注释:使用三 ...
- Python要点总结,我使用了100个小例子!
- python要点记录
1.字典:当存储的key数目在几万到几十万之间效率最高.
- 给Lisp程序员的Python简介
给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...
- Python - References
01 - Python文档 Python:https://www.python.org/ Documentation:https://docs.python.org/ Standard Library ...
- Python3学习策略
自学Python要点 [来自:http://www.cnblogs.com/shsxt/p/9138950.html] 1.找一本浅显易懂,例程比较好的教程,从头到尾看下去. 不要看很多本,专注于一本 ...
- python学习第一课要点记录
写在要点之前的一段话,留给将来的自己:第一次参加编程的培训班,很兴奋很激动,之前都是自己在网上找免费的视频来看,然后跟着写一些课程中的代码,都是照着模子写,没有自己过多的思考.感觉这样学不好,除了多写 ...
- 第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点
第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点 1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题
随机推荐
- LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)
题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_ ...
- 自学华为IoT物联网_09 OceanConnect业务流程
点击返回自学华为IoT物流网 自学华为IoT物联网_09 OceanConnect业务流程 1. 物流网重要的连个协议介绍 1.1 重要物联网协议介绍----MQTT MQTT(消息队列遥测传输) ...
- canvas路径剪切和判断是否在路径内
1.剪切路径 clip() var ctx=mycanvas.getContext('2d'); ctx.beginPath(); // 建一个矩形路径 ctx.moveTo(20,10) ctx.l ...
- JMeter5.1企业级应用应用常用功能详解(含插件安装)
apache jmeter是100%的java桌面应用程序,它被设计用来加载被测试软件功能特性.度量被测试软件的性能.jmeter可以模拟大量的服务器负载,并且jmeter提供图形化的性能分析. JM ...
- bzoj4481非诚勿扰(期望dp)
有n个女性和n个男性.每个女性的如意郎君列表都是所有男性的一个子集,并且可能为空.如果列表非空,她们会在其中选择一个男性作为自己最终接受的对象.将“如意郎君列表”中的男性按照编号从小到大的顺序呈现给她 ...
- Linux包系列的知识(附:Ubuntu16.04升级到18.04的案例)
Linux基础:https://www.cnblogs.com/dunitian/p/4822808.html#linux 之前看到朋友还动不动 apt-get update upgrade,就很纳闷 ...
- Lambda 表达式有何用处?如何使用?
强烈推荐!!! 作者:Sevenvidia链接:https://www.zhihu.com/question/20125256/answer/324121308来源:知乎著作权归作者所有.商业转载 ...
- 详解python的垃圾回收机制
python的垃圾回收机制 一.引子 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存空间给回收掉,而变量名是访问到变量值的唯一方式 ...
- Codeforces Round #529 (Div. 3) D. Circular Dance
传送门 题意: 有 n 个孩子编号为 1~n ,绕着圣诞树 dance: 编号为 i 的孩子可以记住ai1,ai2两个小孩,ai1,ai2是 i 在顺时针方向的相邻的两个小孩,但ai1,ai2不一定是 ...
- 一个小误区 JS中的contains
在Java语言中,contains可以用于判断str1是否包含str2 原生JS中是有contains方法的 但它并不是字符串方法,,仅用于判断DOM元素的包含关系,参数是Element类型 若要在J ...