1、python三元运算
实现方法:
result = 值1 if 条件 else 值2
例如:
1
2
3
4
|
#!/bin/env python
#-*- coding:utf-8 -*-
name
=
'sam'
if
2
>
3
else
'shaw'
print
(name)
|
2、集合
集合是一个无序并且不重复的元素的集合,基本功能包括:关系测试和消除重复元素(去重)
2.1 集合的定义:
1
2
3
4
5
6
7
8
|
#!/bin/env python
#-*- coding:utf-8 -*-
basket
=
{
'apple'
,
'orange'
,
'apple'
,
'pear'
}
# 或者
name
=
set
(
'sam'
,)
print
(basket,name)
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
{
'pear'
,
'apple'
,
'orange'
} {
'a'
,
's'
,
'm'
}
|
2.2 集合方法总结
http://www.cnblogs.com/opsedu/p/5546559.html
3、拷贝
3.1 数字和字符串
对于字符串和数字来说,对其的赋值,浅拷贝和深拷贝操作,操作后的值都一样,因为他们都指向同一个内存地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/bin/env python
#-*- coding:utf-8 -*-
import
copy
a
=
'shaw'
m
=
a
# 赋值
a2
=
copy.copy(a)
# 浅拷贝
a3
=
copy.deepcopy(a)
# 深拷贝
print
(
id
(a),
id
(m),
id
(a2),
id
(a3))
# 查看各变量内存地址
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
17386440
17386440
17386440
17386440
# # #
b
=
68
n
=
b
# 赋值(其他同上)
b2
=
copy.copy(b)
b3
=
copy.deepcopy(b)
print
(
id
(b),
id
(n),
id
(b2),
id
(b3))
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
1363081104
1363081104
1363081104
1363081104
|
3.2 其他数据类型
对于字典、元祖、列表而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。
a. 赋值(只是创建了一个变量,该变量指向了原来的内存地址)
1
2
3
4
5
6
7
8
|
#!/bin/env python
#-*- coding:utf-8 -*-
import
copy
info
=
{
'k1'
:
'shaw'
,
'k2'
:
'sam'
,
'k3'
:[
'shaw'
,
24
]}
info2
=
info
print
(
id
(info),
id
(info2))
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
6817416
6817416
|
b. 浅拷贝(在内存中,仅仅另创建了第一层数据,即仅仅另copy了一份最外层的数据)
1
2
3
4
5
6
7
8
9
10
|
#!/bin/env python
#-*- coding:utf-8 -*-
import
copy
info
=
{
'k1'
:
'shaw'
,
'k2'
:
'sam'
,
'k3'
:[
'shaw'
,
12345
]}
info2
=
copy.copy(info)
print
(
id
(info),
id
(info2))
print
(
id
(info.get(
'k1'
)),
id
(info2.get(
'k1'
)))
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
17237640
17728648
17667160
17667160
# 第二层内存指向同一个地址,表示第二层并没有复制
|
c. 深拷贝(在内存中将所有数据重新创建了一份。除了最里面一层,由' '决定的)
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/env python
#-*- coding:utf-8 -*-
import
copy
info
=
{
'k1'
:
'shaw'
,
'k2'
:
'sam'
,
'k3'
:[{
'shaw'
:
24
},
12345
]}
info2
=
copy.deepcopy(info)
print
(
id
(info),
id
(info2))
print
(
id
(info.get(
'k3'
)[
0
]),
id
(info2.get(
'k3'
)[
0
]))
print
(
id
(info.get(
'k3'
)[
1
]),
id
(info2.get(
'k3'
)[
1
]))
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
5310216
11913608
5310088
12344584
4673488
4673488
# 最里面一层内存地址相同
|
注意:
python中str和int不能被修改,想要修改,只能再创建
python内部对字符串和数字的优化:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/bin/env python
#-*- coding:utf-8 -*-
import
copy
a
=
298
b
=
298
print
(
id
(a),
id
(b))
# # #
c
=
'shaw_wang'
d
=
'shaw_wang'
print
(
id
(c),
id
(d))
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
3362768
3362768
# 相同的内容,只创建一份,指向同一个地址
4600496
4600496
#相同的内容,只创建一份,指向同一个地址
|
4、函数
4.1 函数式编程最重要的是增强代码的重用性和可读性
4.2 定义/使用函数
def 函数名(参数):
函数体
返回值
函数定义要点:
def:表示函数关键字
函数名:函数的名称,函数的调用根据函数名
函数体:函数中的逻辑计算等
返回值:函数执行完毕后,可以给调用者返回数据
4.3 返回值
默认返回None
当函数执行到返回值时,函数将终止,返回值以后的代码不执行
4.4 参数
a. 普通参数
包括形式参数和实际参数
参数一一对应
1
2
3
4
5
6
7
8
|
#!/bin/env python
# -*- coding:utf-8 -*-
def
shaw(msg):
# msg为形式参数
if
msg
=
=
'sam'
:
print
(
'男神'
)
else
:
print
(
'傻帽'
)
shaw(
'sam'
)
# sam为实际参数
|
b. 默认参数(放在参数的最后)
1
2
3
4
5
6
7
8
9
|
#!/bin/env python
# -*- coding:utf-8 -*-
def
shaw(msg,age
=
24
):
# 在定义参数是,可以给参数定义值,叫默认参数
if
msg
=
=
'sam'
:
print
(
'男神,%s'
%
age)
else
:
print
(
'傻帽'
)
shaw(
'sam'
,
18
)
# 调用时,也可以指定参数
shaw(
'sam'
)
# 使用默认参数age=24
|
c. 动态参数
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/env python
# -*- coding:utf-8 -*-
def
func(
*
b):
print
(b)
func(
1
,
2
,
3
)
# 第一种执行方式
a
=
[
44
,
55
,
66
]
# 第二种执行方式
func(a)
func(
*
a)
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
(
1
,
2
,
3
)
([
44
,
55
,
66
],)
# 不加*,是把a看作为一个整体作为函数的一个参数
(
44
,
55
,
66
)
# 加*,是循环a中的每个元素,作为函数的参数
|
d. 动态参数
1
2
3
4
5
6
7
8
9
10
|
#!/bin/env python
# -*- coding:utf-8 -*-
def
func(
*
*
b):
print
(b)
func(name
=
'shaw'
,age
=
24
)
# 执行方式一
info
=
{
'name'
:
'shaw'
,
'age'
:
24
}
func(
*
*
info)
# 执行方式二
C:\Python35\python.exe F:
/
PyCharm
/
Python
/
PY_learn
/
lianxi.py
{
'age'
:
24
,
'name'
:
'shaw'
}
{
'age'
:
24
,
'name'
:
'shaw'
}
|
4.5 函数传参
函数在传递参数时,传的是引用
4.6 变量
局部变量
在函数体区块内定义的变量,仅在当前函数中生效
全局变量
在函数体外定义的变量,在所有函数中都生效
例如:
1
2
3
4
5
6
7
8
9
10
|
#!/bin/env python
# -*- coding:utf-8 -*-
name
=
(
'shaw'
)
# 全局变量
def
func(
*
args):
name
=
(
'sam'
)
# 局部变量
if
2
>
1
:
print
(name,args)
else
:
print
(
'haha'
)
func(
24
)
|