频道栏目
首页 > 资讯 > Python > 正文

python关于引用,装饰器,列表知识讲解

18-07-19        来源:[db:作者]  
收藏   我要投稿

变量的引用

变量和数据都是保存在内存中的

在 python 中函数的参数传递以及返回值都是靠引用传递的

标准数据类型

在内存中存储的数据可以有多种类型。

例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。

Python 定义了一些标准类型,用于存储各种类型的数据。

Python 有五个标准的数据类型:

Numbers(数字)

String(字符串)

List(列表)

Tuple(元组)

Dictionary(字典)

引用的概念

在 python 中

变量和数据是分开存储的

数据保存在内存中的一个位置

变量中保存的是数据在内存中的地址

变量中记录数据的地址,就叫做引用

使用 id() 函数可以查看变量中保存数据所在内存的地址

引用(引用变量时用的是内存地址)
In [1]: a = 1

In [2]: id(a)
Out[2]: 11398248

In [3]: id(1)
Out[3]: 11398248

In [4]: b = 1

In [5]: id(b)
Out[5]: 11398248

In [6]: b = 2

In [7]: id(b)
Out[7]: 11398224
# 定义了一个函数,准备了一个叫num的变量,引用的是数字10的内存地址
def test(num):
    print '在函数内部 %d 对应的内存地址是 %d' % (num,id(num))
# 定义了一个数字变量
a=10
print 'a 变量保存数据内存的地址是 %d ' %id(a)
test(a)

这里写图片描述

# 定义了一个函数,准备了一个叫num的变量,引用的是数字10的内存地址
def test(num):
    print '在函数内部 %d 对应的内存地址是 %d' % (num,id(num))
# 定义了一个字符串变量
    result='hello'
    print '函数要返回的内存地址是 %d ' % id(result)
    return result
a=10
print 'a 变量保存数据内存的地址是 %d ' %id(a)
r = test(a)
print '%s的内存地址是 %d' %(r,id(r))

这里写图片描述

装饰器

概念:把一个函数当作参数,传递给函数

返回一个加强版的函数

本质上是一个返回函数的函数

“在不改变原函数的基础上,给函数增加功能”

def func1():
    print 'have a nice day'
def func2():
    print 'hahahahahhaahahah'
# outer()将传递进来的函数装饰,然后返回装饰好了的函数,
# 形参的作用是将装饰器公用
def outer(func):
    def inner():
        print '************'
        func()
    # 将装饰好的函数返回
    return inner
# f是func1的加强版,其实就是inner()
f = outer(func1)
f()
g = outer(func2)
g()

这里写图片描述

def old(age):
    print " man age is %d " % age
def outer(func):
    def inner(age):
        if age < 0:
            age = 0
        func(age)
    return inner
age = outer(old)
age(2)

这里写图片描述

装饰器标准格式

def outer(func):
    def inner(age):
        if age < 0:
            age = 0
        func(age)
    return inner
@outer
def old(age):
    print " man age is %d " % age
old(-1)

这里写图片描述

def outer(func):
    def inner(*args):
        print '#############'
        func(*args)
        print '@@@@@@@@@@@@@@@@@@@'
    return inner


@outer
def say(name,age):
    print 'my name is %s,i am %d years old' % (name,age)
say('haha',18)

这里写图片描述

def outer(func):
    def inner():
        print '############'
        func()
        print '@@@@@@@@@@@@@'
    return inner

@outer
def demo1():
    print 'demo1=====>'
demo1()

这里写图片描述

def outer(func1):
    def inner(arg):
        print 'hahaahha'
        result= func1(arg)
        print 'hehehehehe'
        return result
    return inner
@outer
def func1(arg):
    print 'func1',arg
    print '^^^^^^^^^'
    return 'return'
response = func1('westos')
print response

这里写图片描述

列表

列表

我们引入一个新的概念:数据机构

数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字或字符,甚至可以是其他数据结构 >,在 python 中,最基本的数据结构是序列,序列中的每个元素匾被分配一个序号–即元素的位置,也称为索引,第一 > 个索引是 0,第二个则是 1,以此类推

列表是什么

列表由一系列特定顺序排列的元素组成,你可以创建包含字母表中所有字母,数字或所有家庭成员姓名的列表;也可 > 以将任何东西加入列表中,其中的元素之间可以没有任何关系

In [1]: bicycles = 'bmw'

In [2]: bicycles1 = 'bmw'

In [3]: bicycles2 = 'trek'

In [4]: bicycles3 = 'readline'

In [5]: bicycles
Out[5]: 'bmw'

In [6]: bicycles1
Out[6]: 'bmw'

In [7]: bicycles2
Out[7]: 'trek'

In [8]: bicycles3
Out[8]: 'readline'

In [9]: bicycles = ['bmw','trek','readline']

In [10]: type(bicycles)
Out[10]: list

In [11]: bicycles[0]
Out[11]: 'bmw'

In [12]: bicycles[1]
Out[12]: 'trek'

In [13]: bicycles[2]
Out[13]: 'readline'

In [14]: name_list.
  File "", line 1
    name_list.
              ^
SyntaxError: invalid syntax


In [15]: name_list = []

In [16]: name_list.
name_list.append   name_list.index    name_list.remove   
name_list.count    name_list.insert   name_list.reverse  
name_list.extend   name_list.pop      name_list.sort     

In [16]: spam = ['hello','hi','cat','dog']

In [17]: type(spam)
Out[17]: list

In [18]: spam.index('hello')
Out[18]: 0

In [19]: spam.index('hi')
Out[19]: 1

In [20]: spam.index('cat')
Out[20]: 2

In [21]: spam.index('dog')
Out[21]: 3

Python 列表 (List)

序列是 Python 中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是 0,第二个索引是 1,依此类推。

Python 有 6 个序列的内置类型,但最常见的是列表和元组。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

list1 = [‘physics’, ‘chemistry’, 1997, 2000]

list2 = [1, 2, 3, 4, 5]

list3 = [“a”, “b”, “c”, “d”]

与字符串的索引一样,列表索引从 0 开始。列表可以进行截取、组合等

访问列表中的值

使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:

list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]

print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]
以上实例输出结果:
list1[0]:  physics
list2[1:5]:  [2, 3, 4, 5]
Python 列表脚本操作符
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
如下所示:
Python 表达式                  结果                              描述
len([1, 2, 3])                  3                               长度
[1, 2, 3] + [4, 5, 6]           [1, 2, 3, 4, 5, 6]              组合
['Hi!'] * 4                     ['Hi!', 'Hi!', 'Hi!', 'Hi!']    重复
3 in [1, 2, 3]                  True                            元素是否存在于列表中
for x in [1, 2, 3]: print x,    1 2 3                           迭代
bicycles = ['bmw','trek','readline']
print bicycles






# 修改
bicycles = ['bmw','trek','readline']
print bicycles
bicycles[0] = 'trek'
print bicycles



更新列表
你可以对列表的数据项进行修改或更新,你也可以使用 append() 方法来添加列表项
# 添加列表元素,添加到末尾
bicycles = ['bmw','trek','readline']
print bicycles
bicycles.append('hai')
print bicycles

这里写图片描述

motorcycles = []
print motorcycles
motorcycles.append('honda')
print motorcycles
motorcycles.append('yamaha')
print motorcycles
motorcycles.append('bwm')
print motorcycles

这里写图片描述

num = [1,2,3,4,5,6]
print num
num.insert(3,'five')
print num

这里写图片描述

Python 列表截取
Python 的列表截取实例如下:
>>>L = ['Google', 'Runoob', 'Taobao']
>>> L[2]
'Taobao'
>>> L[-2]
'Runoob'
>>> L[1:]
['Runoob', 'Taobao']
>>>
描述:
Python 表达式          结果                          描述
L[2]                'Taobao'                        读取列表中第三个元素
L[-2]               'Runoob'                        读取列表中倒数第二个元素
L[1:]               ['Runoob', 'Taobao']            从第二个元素开始截取列表
num = [1,2,3,4,5,6]
print num
num.insert(3,'five')
print num



# extent:把另外一个列表的完整内容追加到当前列表的末尾
bicycles = ['bmw','trek','readline']
num = [1,2,3,4]
bicycles.extend(num)
print bicycles



# del关键字,本质上是将一个变量从内存中删除
bicycles = ['bmw','trek','readline']
print bicycles
del bicycles[1]
print bicycles



# pop()弹出列表末尾一个元素
bicycles = ['bmw','trek','readline']
bicycles.pop()
print bicycles



bicycles = ['bmw','trek','readline']
bicycles.remove('bmw')
print bicycles

这里写图片描述

cars = ['bmw','audi','toyoto','subaru']
# len()获得列表的长度
# print len(cars)
# count:可以统计列表中某一个元素出现的次数
print cars.count('bmw')
# remove方法,默认删除列表中出现的第一个元素
# (此元素在列表中不唯一)
# 如果想不起来方法怎么用,
# 将鼠标放在方法名上ctrl+q
cars.remove('bmw')
print cars
Python 包含以下方法:
序号  方法
1   list.append(obj)
在列表末尾添加新的对象
2   list.count(obj)
统计某个元素在列表中出现的次数
3   list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4   list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
5   list.insert(index, obj)
将对象插入列表
6   list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7   list.remove(obj)
移除列表中某个值的第一个匹配项
8   list.reverse()
反向列表中元素
9   list.sort(cmp=None, key=None, reverse=False)
对原列表进行排序
# sort()对列表中的元素进行排序
name = ['wang','liu','qin','qiang','sun']
print name
name.sort()
print name

# sort(reverse=True) 对列表中的元素倒着排序
name = ['wang','liu','qin','qiang','sun']
print name
name.sort(reverse=True)
print name

# print sorted(name)临时对列表中的元素进行排序
name = ['wang','liu','qin','qiang','sun']
print name
print sorted(name)
print name


# reverse() 倒着打印列表元素,不排序
name = ['wang','liu','qin','qiang','sun']
print name
name.reverse()
print name

这里写图片描述

# 循环打印列表
name = ['wang','liu','qin','qiang','sun']
# names是随便起的名字
for names in name:
    # 缩进内部是循环
    print names
# 缩进外部与内部无关
print name
# 缩进外部打印的是循环完成的,即最后一次循环的字符
print names

这里写图片描述

# 打印数字 1-5
for abc in range(1,6):
    print abc
# 打印列表为1-5 [1, 2, 3, 4, 5]
nums = list(range(1,6))
print nums

# 打印列表2-10,步长为2,[2, 4, 6, 8, 10]
num = list(range(2,11,2))
print num

这里写图片描述

# 列表内数字简单运算,先定义一个空列表
squares = []
# 定义列表内容
for values in range(2,11,2):
    # 用一个中间变量用来计算
    square = values ** 3
    # 将计算好的中间变量导入列表
    squares.append(square)
print squares

这里写图片描述

相关TAG标签
上一篇:Spark GraphX之Dijkstra(单源最短路径)、Prime(最小生成树)、FloydWarshall(多源最短路径)
下一篇:C++的多态与模板函数代码实例
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站