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.分布式爬虫需要解决的问题
随机推荐
- rt-thread 学习路线
@2019-01-25 [小记] > BSP制作与使用 将板载资源.芯片外设全部制作BSP,做到使用时只需在 menuconfig 中配置即用
- [国家集训队]middle 解题报告
[国家集训队]middle 主席树的想法感觉挺妙的,但是这题数据范围这么小,直接分块草过去不就好了吗 二分是要二分的,把\(<x\)置\(-1\),\(\ge x\)的置\(1\),于是我们需要 ...
- LVS负载均衡群集(NAT)
----构建NAT模式的LVS群集----------client---------------LVS----------------WEB1-----------WEB2------------NF ...
- Who Gets the Most Candies? POJ - 2886 (线段树)
按顺时针给出n个小孩,n个小孩每个人都有一个纸,然后每个人都有一个val,这个val等于自己的因子数,如果这个val是正的,那就顺时针的第val个孩子出去,如果是负的话,就逆时针的第val个孩子出去, ...
- 蓝桥杯 错误票据 (stringstream的使用)
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T28 问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是 ...
- Ubuntu18.04 下的Gif录制工具
正文: 开源地址:https://github.com/phw/peek Linux包相关的知识如果不知道可以看以前讲的:https://www.cnblogs.com/dunitian/p/9095 ...
- docker镜像操作
1.获取镜像 docker pull NAME[:TAG] 如果不显式地指定TAG,则默认会选择latest标签,即下载仓库中最新版本的镜像.//获取最新镜像docker pull ubuntu // ...
- HEOI2019 游记——240秒处的起死回生
我还没死 Day-1 最后一场模拟赛! T1:自然数幂次和再前缀和,还是O(k)次多项式,拉格朗日插值,,,,,不能总想斯特林数啊!!! T2:神仙DP预处理... T3:AC自动机+LCA处差分+暴 ...
- UOJ176 新年的繁荣
题目链接 Boruvka生成树算法 \(Boruvka\)算法就是先把每个点看作一个联通块,然后不断在联通块之间找最优的边进行合并.因为每次联通块的数量最少缩小一半.所以合并次数是\(log\)的 先 ...
- mciSendString 多线程播放多首音乐 & 注意事项
昨天晚上遇到一个问题: 使用 mciSendString 控制播放多首音乐的时候,出现最后一次播放的音乐无法通过 mciSendString ("close mp3") 关闭音乐 ...