python的封装与解构

封装

  • 将多个值使用逗号分割,组合在一起
  • 本质上,返回一个元祖,只是省掉了小括号
  • python特有语法,被很多语言学习和借鉴
t1 = (1,2) #定义为元祖
t2 = 1,2 #将1和2封装成元祖

print(type(t1))
print(type(t2))

返回类型都为元组:

<class ‘tuple‘>
<class ‘tuple‘>

使用方法:

a = 4
b = 5
temp = a
a = b
b = temp
# 等价于

a,b = b,a #等号右边使用了封装,左边使用了结构

使用示例,冒泡算法:

# 冒泡算法
list = [1,4,5,2,7,9,8,3,6]

for i in range(len(list)):
    flag = False
    for j in range(len(list)-1-i):
        if list[j] > list[j+1]:
            list[j],list[j+1] = list[j+1],list[j]
            flag = True
    if not flag:
        break
print(list)

解构

  • 把线性结构的元素解开,并顺序的赋给其他变量
  • 左边接纳的变量数要和右边解开的元素个数一致

示例:

list = [1,2]
a,b = list
print(a,b)

输出结果为:

1 2

结构方法示例:

a,b = 1,2                       |        1  2  
a,b = (1,2)                     | 输      1 2   
a,b = [1,2]                     |        1  2
a,b = [10,20]                   | 出      10 20
a,b = {10,20}                   |        10 20
a,b = {‘a‘:10,‘b‘:20}              |  结      a  b
a,b = {10,20,30}                 |        #解构接收与封装数量不一致 错误
a,*b = {10,20,30}                |  果      10 [20, 30]
[a,b] = (1,2)                   |        1  2
[a,b] = 10,20                  |  为      10  20
(a,b) ={30,40}                 |        30  40

python3的解构

  • 使用 *变量名 接收,但不能单独使用
  • 被 *变量名 手机后组成一个列表

示例1:

list = list(range(10))
a,*b,c = list
print(a,b,c)

输出结果为:

0 [1, 2, 3, 4, 5, 6, 7, 8] 9

示例2:

list = list(range(10))
*list2 = list
print(list2)

输出错误,不能单独使用*变量

    *list2 = list
    ^
SyntaxError: starred assignment target must be in a list or tuple

示例3:

list = list(range(10))
*a,b = list
print(a,b)

输出结果为:

[0, 1, 2, 3, 4, 5, 6, 7, 8] 9

示例4:

list = list(range(10))
a,*b = list
print(a,b)

输出结果为:

0 [1, 2, 3, 4, 5, 6, 7, 8, 9]

示例5:

list = list(range(10))
a,*b,*c,d = list
print(a,b,c,d)

输出结果错误,不能使用多个*变量

    a,*b,*c,d = list
    ^
SyntaxError: two starred expressions in assignment

示例6:

a,*b,c = "abcdefg"
print(b)

输出结果为:

[‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘]

丢弃变量

  • 这是一个惯例,是一个不成文的约定,不是标准
  • 如果不关心一个变量,就可以定义该变量的名字为_
  • _是一个合法的标识符,也可以作为一个有效的变量使用,但是定义为下划线就是希望不要被使用,除非明确知道这个数据需要使用
  • _这个变量本身无任何语义,没有任何可读性
  • python中很多库,都使用了这个变量,使用十分广泛,不要在不明确的作用域的情况下使用,导致冲突

示例1:

list = [9,8,7,20]
a,*b,c = list
x,*_,z = list
print(x,z)

输出结果为:

9 20

_是合法的标识符,看到下划线就知道这个变量就是不想被使用

示例2:

list = [2,1,3,5]
_,*_,a = list
print(_)
print(a)

输出结果为:

[1, 3]
5

复杂示例:

取出第二个,第四个,倒数第二个

list = list(range(10))
_,a,_,b,*_,c,_ = list
print(a,b,c)

从list = [1,(2,3,4),5]中取4出来

list = [1,(2,3,4),5]
_,(*_,a),_ = list
print(a)

环境变量JAVA_HOME=/usr/bin,返回变量名和路径

x = ‘JAVA_HOME=/usr/bin‘
env,path = x.split(‘=‘,1)
print(env)
print(path)

以上输出结果为:

1 3 8
4
JAVA_HOME
/usr/bin

原文地址:https://www.cnblogs.com/rivendare/p/9491675.html

时间: 2024-10-06 22:10:16

python的封装与解构的相关文章

Python封装及解构

python封装及解构 Python的封装与其他语言的封装箱不同,python中没有装箱的概念,一切皆对象 将多个值使用逗号进行分割,本质上是返回元组 In [1]: a = 1,2 In [2]: type(a) Out[2]: tuple In [3]: a Out[3]: (1, 2) 封装 在进行交换的时候,已经被封装为元组 在赋值的过程中,看似什么都没有做,但是在右值将其封装为元组,因为其值不变 In [9]: a = 1,2 In [10]: a?? Type:       tupl

封装与解构

在IPython中可以使用 %timeit  计算程序运行时间 1.单行: %timeit  statement 2.多行:%%timeit 例如: def asfd(n): # 定义一个函数 for i in range(n): return(i) 单行:%timeit(20) 多行:%%timeit  m=20 asfd(m)   封装与解构: 封装: #  等号右边多个值使用逗号分割组合返回一个元组 例如: t = 1,2,3 print(t) 为(1,2,3) 解构: # 把线性结构(非

python内置函数封装、解构

一.封装 将多个值使用逗号分割,组合在一起,本质上返回一个元组,只是省掉了小括号 python特有语法,被很多言语学习和借鉴 二.解构 把线性结构的元素解开,并顺序的赋给其他变量 左边接纳的变量数要和右边解开的元素个数一致 举例: >>> lst = [3,5]  >>> a,b = lst  >>> print(a,b)  3 5  >>> 三.python3版本的解构 使用*变量名接收,但不能单独使用 被*变量名收集后组成一个列表

Python-封装与解构

1.封装: 定义: 将多个值用括号分割,组合在一起 本质上,返回一个元组,只是省掉了小括号 1 In [99]: t = 1,2,3 # 封装成元组! t = (1,2,3) 2 3 In [100]: t 4 Out[100]: (1, 2, 3) 1 a = 4 2 b = 5 3 tmp = a 4 a = b 5 b = tmp 6 等价于 7 a, b = b, a 8 9 注:但并不是真正的等价,这里右侧是一个封装的元组,对左侧使用了解构 2.解构: 把线性结构的元素解开,并顺序的赋

封装解构,集合,字典,内建函数和简单选择排序相关知识及习题

封装 将多个值使用逗号分割,组合在一起本质上,返回一个元组,只是省掉了小括号python特有语法,被很多语言学习和借鉴 解构 把线性结构的元素解开,并顺序的赋给其它变量左边接纳的变量数要和右边解开的元素个数一致 转置矩阵 方阵利用封装解构完成代码矩阵先开辟空间再利用封装解构完成代码利用enumerate函数得到索引值完成代码 集合 可变的 . 无序的 . 不重复 的元素的集合set的元素要求必须可以hash元素不可以索引set可以迭代set增加 add(elem)增加一个元素到set中,如果元素

python 函数、参数及参数解构

函数 数学定义 y=f(x), y是x函数,x是自变量.y=f(x0,x1...xn) Python函数 由若干语句组成的语句块,函数名称,参数列表构成,它是组织代码的最小单位 完成一定的功能 函数作用 结构化编程对代码的最基本的封装,一般按照功能组织一段代码 封装的目的为了复用,减少冗余代码 代码更加简洁美观,可读易懂 函数分类 内建函数,如max(),reversed()等 库函数,如math.ceil()等 函数定义.调用 def语句定义函数 def 函数名(参数列表): 函数体(代码块)

【Python之旅】第四篇(三):Python面向对象编程详解

终于是来到了Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下. 1.面向对象编程的相关名词及解释 世界万物,皆可分类,一切皆为对象. 所谓的面向对象编程,指的是一种编程的思想,通过对具体代码实现过程(面向过程编程)的不断抽象,以形成一个个的类别,以提高我们进行大型程序编写的效率(面向对象的具体实现需要面向过程,大型程序也可以用面向过程来编写,只是比较麻烦).对于面向对象编程的相关名词和解释如下: 对象 :类的实体\一个叫Rain的

Python匿名函数详解

转载自杰瑞的专栏 lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的.在Python中, lambda作为一个关键字,作为引入表达式的语法.想比较def函数,lambda是单一的表达式,而不是语句块! 你仅能够在lambda中封装有限的业务逻辑,这样设计的目的:让lambda纯粹为了编写简单的函数而设计,def则 专注于处理更大的业务. 在编程语言中,函数的应用: 1. 代码块重复,这时候必须考虑用到函数,降低程序的冗余度 2. 代

ES6--变量的声明及解构赋值

ES6的目标是使得JavaScript语言可以用来编写大型的复杂的应用程序,成为企业级开发语言:该标准已于2015年6月17日正式发布.但是真正的普及我认为还得需要一段时间,然而这并不是理由让我们不去了解ES6.更重要的一点是,Google公司的V8引擎已经部署了ES6部分特性,对于NodeJS的开发者来说应该熟练掌握. 在浏览器没有全面支持的情况下,Google公司推出了Traceur转码器(https://github.com/google/traceur-compiler),可将ES6编译