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. 《App后台开发运维与架构实践》第2章 App后台基础技术

    2.1 從App業務邏輯中提煉API接口 業務邏輯思維導圖 功能-業務邏輯思維導圖 基本功能模塊關系 功能模塊接口UML(設計出API) 在設計稿標注API 編寫API文檔 2.2 設計API的要點 ...

  2. rt-thread之stm32系列BSP制作方法

    @2019-01-24 [小记] bsp制作方法: 官网下载 rt-thread 源码,将路径 bsp/stm32/libraries/templates/ 下的模板文件,Copy至路径 bsp/st ...

  3. Scout YYF I POJ - 3744(概率dp)

    Description YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...

  4. SHOI2008仙人掌图(tarjan+dp)

    Solution 好题啊没的说. 本题需要求出仙人掌的直径,但仙人掌是一个带有简单环的一张图无法直接用树形dp求解,但它有一个好东西就是没有类似环套环的东西,所以我们在处理时就方便了一些. 思路:ta ...

  5. Java 判断相等

    1.基本数据类型用 == long a = (long) 1234567890; long b = (long) 1234567890; if (a == b) { System.out.printl ...

  6. CF1101

    D:题意:树上每个顶点有个权值,求最长链,满足链上gcd > 1 解:对每个质数建虚树,每个点只会拆成log个点,所以是log2的. #include <bits/stdc++.h> ...

  7. 【CF1141E】Superhero Battle

    \[x*p\ge y\rightarrow x=\lfloor{{y-1}\over p}\rfloor+1\]

  8. sprintf() 处理 float类型的数字,保留小数位等。

    关于 sprintf()的百科地址: http://baike.baidu.com/view/1295144.htm sprintf(szText, "%[填空字元][宽度][.精度]f&q ...

  9. Vue中data返回对象和返回值的区别

    速记:粗浅的理解是,事件的结果是影响单个组件还是多个组件.因为大部分组件是要共享的,但他们的data是私有的,所以每个组件都要return一个新的data对象 返回对象的时候 <!DOCTYPE ...

  10. JS验证身份证

    话不多说,直接看代码 JS部分 /** * 身份证15位编码规则:dddddd yymmdd xx p * dddddd:地区码 * yymmdd: 出生年月日 * xx: 顺序类编码,无法确定 * ...