精华内容
下载资源
问答
  • importrandomtimes=3secret=random.randint(1,10)print('----------------WJL-----------------')guess=0#这个guess为什么要赋值为0?print('不妨猜猜小白现在心里想的是哪个数字:',e...import randomtimes = 3...

    importrandomtimes=3secret=random.randint(1,10)print('----------------WJL-----------------')guess=0#这个guess为什么要赋值为0?print('不妨猜猜小白现在心里想的是哪个数字:',e...

    import random

    times = 3

    secret = random.randint(1,10)

    print('----------------WJL-----------------')

    guess = 0

    #这个guess为什么要赋值为0?

    print ('不妨猜猜小白现在心里想的是哪个数字:', end=' ')

    while (guess != secret) and (times > 0):

    temp = input()

    #input是什么意思

    guess = int(temp)

    times = times - 1

    if gusee == secret:

    print('猜对了')

    print('不过没奖励,(*^__^*)')

    else:

    if guess > secret:

    print('大了')

    else:

    print('小了')

    if times > 0:

    print('再试一次',end=' ')

    else:

    print('没机会了')

    print('游戏结束')

    问题就是打#的

    展开

    展开全文
  • 1[:] = arr_2 and arr_1 = arr_2 解决方案 Your question involves a mix of basic Python syntax, and numpy specific details. In many ways it is the same for lists, but not exactly. arr[:, 0] returns the 1...

    I occasionally use numpy, and I'm trying to become smarter about how I vectorize operations. I'm reading some code and trying to understand the semantics of the following:

    arr_1[:] = arr_2

    In this case,

    I understand that in arr[:, 0], we're selecting the first column of the array, but I'm confused about what the difference is between arr_1[:] = arr_2 and arr_1 = arr_2

    解决方案

    Your question involves a mix of basic Python syntax, and numpy specific details. In many ways it is the same for lists, but not exactly.

    arr[:, 0] returns the 1st column of arr (a view), arr[:,0]=10 sets the values of that column to 10.

    arr[:] returns arr (alist[:] returns a copy of a list). arr[:]=arr2 performs an inplace replacement; changing the values of arr to the values of arr2. The values of arr2 will be broadcasted and copied as needed.

    arr=arr2 sets the object that the arr variable is pointing to. Now arr and arr2 point to the same thing (whether array, list or anything else).

    arr[...]=arr2 also works when copying all the data

    Play about with these actions in an interactive session. Try variations in the shape of arr2 to see how values get broadcasted. Also check id(arr) to see the object that the variable points to. And arr.__array_interface__ to see the data buffer of the array. That helps you distinguish views from copies.

    展开全文
  • Python中赋值含义

    2020-08-14 11:56:11
    在Python中赋值含义却是关联变量名字和实际对象,即变量指向了实际对象,当对变量再次赋值时,变量原来指向的对象并不会改变(其实对象的reference count会减1),而是变量指向了新的对象而已。 所以这还导致...

    在C++中,变量就是对象本身,对变量赋值就改变了它代表的对象。而在Python中,赋值的含义却是关联变量名字和实际对象,即变量指向了实际对象,当对变量再次赋值时,变量原来指向的对象并不会改变(其实对象的reference count会减1),而是变量指向了新的对象而已。

    所以这还导致了一个后果,当多个变量指向同一个对象时,那么用其中一个变量修改对象后,其它指向同一对象的变量也“被改变”了。下面的代码清楚地显示了这一点:

    >>> a = [0, 1, 2, 3]
    >>> b = a
    >>> a
    [0, 1, 2, 3]
    >>> b
    [0, 1, 2, 3]
    >>> a[0] = 99
    >>> a
    [99, 1, 2, 3]
    >>> b
    [99, 1, 2, 3]
    >>> a = [5, 6, 7, 8]
    >>> a
    [5, 6, 7, 8]
    >>> b
    [99, 1, 2, 3]         
    
    展开全文
  • 摘要:如果你学过 C 语言,那么当你初见 Python 时可能会觉得 Python赋值方式略有诡异:好像差不多,但又好像哪里有点不太对劲。本文比较并解释了这种赋值逻辑上的差异。回答了为什么需要这种赋值逻辑以及如何...

    摘要:

    如果你学过 C 语言,那么当你初见 Python 时可能会觉得 Python 的赋值方式略有诡异:好像差不多,但又好像哪里有点不太对劲。

    本文比较并解释了这种赋值逻辑上的差异。回答了为什么需要这种赋值逻辑以及如何使用这种赋值逻辑的问题。

    当然,即使未学过 C 语言,也可通过本文更好地了解 Python 的赋值逻辑——这种赋值逻辑影响着 Python 的方方面面,从而可以让你更好地理解和编写 Python 程序。

    第一章 引例

    先来看一组似乎矛盾的代码:

    # 代码 1

    >>> a = 3

    >>> b = a

    >>> b = 5

    >>> a

    3

    这看上去似乎很好理解。第二步中, a 只是把值复制给 b,然后 b 又被更新为 5,a 和 b 是两个独立的变量,那么 a 的值当然不会受到影响。

    真的是这样吗?

    再来看一段代码:

    # 代码 2

    >>> a = [1, 2, 3]

    >>> b = a

    >>> b[0] = 1024

    >>> a

    [1024, 2, 3]

    第二步中,a 只是复制把列表复制给 b,然后更新 b[0] 的值,最后输出 a,可是 a 竟然也被改变了。

    按照代码 1 的逻辑(即变量之间独立),代码 2 的中的 a 不应该受到影响。

    为什么出现了这样的差异?

    第二章 Python 的“反直觉”

    先不解释上面那个“看似矛盾”的问题。

    先来看看另一组简单的 Python 代码在内存中是什么样子的:

    # 代码 3

    b = 3

    b = b + 5

    它在内存中的操作示意图是这样的:

    999371-20170830153121327-1740139209.png

    然而,从代码的的字面意思上看,“把 3 赋给 b,把 b 加 5 之后再赋给 b。”

    也就是把代码看成这个样子:

    b ← 3

    b ← b + 5

    所以下面这张在内存中的操作图可能更符合我们的直觉:

    999371-20170830153139546-754043367.png

    也即 b + 5 的值又写回到 b 中。典型的 C 程序就是这样的。为变量 b 分配一个 int 型的内存单元,然后将整数 3 存放在该内存单元中。b 就代表了该块内存空间,不再移动,可以更新 b 的值,但 b 在内存中的地址就不再变化了。所以我们说 b = b + 5,就等于 b ← b + 5,把 b 的值加 5 之后还依然放入 b 中。 变量 b 和它所在内存空间紧紧绑定在一起,人形合一。

    而再看看上面 Python 中的内存示意图,b + 5 得到了一个新值,然后令 b 指向了这个新值。换句话说,它做的是事情是这样的:

    b → 3

    b → b + 5

    先令 b 指向 3,再令 b 指向 b + 5 这个新值。

    C 程序更新的是内存单元中存放的值,而 Python 更新的是变量的指向。

    C 程序中变量保存了一个值,而 Python 中的变量指向一个值。

    如果说 C 程序是通过操纵内存地址而间接操作数据(每个变量固定对应一个内存地址,所以说操纵变量就是操纵内存地址),数据处于被动地位,那么 Python 则是直接操纵数据,数据处于主动地位,变量只是作为一种引用关系而存在,而不再拥有存储功能。

    在 Python 中,每一个数据都会占用一个内存空间,如 b + 5 这个新的数据也占用了一个全新的内存空间。

    Python 的这种操作让数据成为主体,数据与数据之间直接进行交互。

    而数据在 Python 中被称为对象 (Object)。

    这句话并不太严谨。不过在这个简单的例子中是成立的。

    一个整数 3 是一个 int 型对象,一个 'hello' 是一个字符串对象,一个 [1, 2, 3] 是一个列表对象。

    Python 把一切数据都看成「对象」。它为每一个对象分配一个内存空间。 一个对象被创建后,它的 id 就不再发生变化。

    id 是 identity 的缩写。意为“身份;标识”。

    在 Python 中,可以使用 id(),来获得一个对象的 id,可以看作是该对象在内存中的地址。

    一个对象被创建后,它不能被直接销毁。因此,在上个例子中,变量 b 首先指向了对象 3,然后继续执行 b + 5,b + 5 产生了一个新的对象 8,由于对象 3 不能被销毁,则令 b 指向新的对象 8,而不是用对象 8 去覆盖对象 3。在代码执行完成后,内存中依然有对象 3,也有对象 8,变量 b 指向了对象 8。

    如果没有变量指向对象 3(即无法引用它了),Python 会使用垃圾回收算法来决定是否回收它(这是自动的,不需要程序编写者操心)。

    一个旧的对象不能被覆盖,因旧的对象交互而新产生的数据会放在新的对象中。也就是说每个对象是一个独立的个体,每个对象都有自己的“主权”。因此,两个对象的交互可以产生一个新的对象,而不会对原对象产生影响。在大型程序中,各个对象之间的交互错综复杂,这种独立性则使得这些交互足够安全。

    C 程序为每个变量都分配一个了固定的内存地址,这保证了 C 变量之间的独立性。

    C 语言是变量(也即内存地址)之间的交互,Python 是对象(数据)之间的交互。这是两种不同的交互方式。

    那么,Python 这种数据之间直接进行交互的好处体现在哪里?

    很遗憾,这并不是本文所要讨论的内容,该部分属于面向对象设计的核心内容。本文只是对 Python 的这种交互方式与 C 语言的交互方式做了一些比较,以区分两者在逻辑与物理上的差异所在。

    相信这种逻辑会帮助你更好地编写 Python 程序,并且帮助你在日后更加深入地理解面向对象的程序设计。

    本章补充:

    Python 的赋值更改的是变量的指向关系,因此,对于 Python,从前向后阅读一个赋值表达式会更加容易理解。

    // C 语言

    b ← b + 5// 把 b+5 的值赋给 b

    # Python

    b → b + 5# 令 b 指向 b + 5

    第三章 回答第一章的问题

    先看代码 1:

    # 代码 1

    >>> a = 3

    >>> b = a

    >>> b = 5

    >>> a

    3

    Python 中所有的数据都是对象,数字类型也不例外。3 是一个 int 类型的对象,5 也是一个 int 型的对象。

    第一行,a 指向对象 3。

    第二行,令 b 也指向 a 所指向的对象 3。

    第三行,因为对象不可被覆盖(销毁),令 b 指向新对象 5,则只剩下 a 指向对象 3。

    第四行,输出 a,得到 3。

    在内存中的操作示意图 (Python):

    999371-20170830153155437-401329091.png

    这与第一章中的解释完全不同,第一章中的解释是用 C 语言解释的:

    999371-20170830153206499-525213114.png

    这是两种完全不一样的机制。

    Python 中 b 首先指向了对象 3,然而因为对象之间的独立性,一个对象不能去覆盖另一个对象,则令 b 指向对象 5,而不是将对象 3 在内存中替换为对象 5。

    再来看代码 2:

    # 代码 2

    >>> a = [1, 2, 3]

    >>> b = a

    >>> b[0] = 1024

    >>> a

    [1024, 2, 3]

    第一行,令 a 指向一个列表 [1, 2, 3];

    第二行,令 b 也指向 a 所指向的列表;

    第三行,令 b[0] = 1024,1024 虽然是一个对象,但它并没有试图覆盖b所指向的对象,而是对该对象的第一个元素进行修改。修改,而不是覆盖,所以它可以原对象进行操作,而不是令 b 指向修改后的对象。

    所在第四行输出的 a 所指向的列表也发生了变化。

    在内存中的操作示意图 (Python):

    999371-20170830153216733-1299490584.png

    这种对象的值可以修改的对象被称为可变对象 (immutable object)。常见的列表、字典为可变对象。

    因为它的值可以被修改,因此如果有多个变量指向该列表:

    a = [1, 2, 3]

    b = a

    c = a

    d = a

    ...

    那么使用 b, c, d, ... 的任何一个变量都能访问该对象并修改其中的内容。这种特性常常被我们用于函数的参数传递,如果函数的参数是可变对象,那么函数可以对“实参”中的内容进行修改:

    >>> a = [1, 2, 3]

    >>> def change(t):

    t[0] = 1024

    >>> change(a)

    >>> a

    [1024, 2, 3]

    >>>

    调用函数 change 时,令 t 也指向了 a 所指向的列表,然后使用 t 更改了列表中的第一个元素,更改,而不是覆盖,因此对 t 所指向的对象的更改也改变了“实参” a 所指向的对象。而 C 语言则因为实参到形参是值传递,则无法改变实参的内容(虽然借助指针可以实现,但这里只说一般情况下)。

    但在函数以外的区域,我们要尽量避免这样使用,这很容易导致出错(当然,有时候会很有用,这取决于你的程序)。比如,在多人协作编程时,如果甲不小心修改了某可变对象,那么乙、丙、丁等用到该对象的人都会受到影响。

    而对于不可变对象 (immutable object),即其值无法更改的对象,传入函数时则不会影响“实参”的值:

    >>> a = 5

    >>> def add(n):

    n = n + 2

    >>> add(a)

    >>> a

    5

    调用函数 add 时,令 n 也指向了 a 所指向的对象 5, 再执行 n = n + 2,n 所指向的对象 5 与对象 2 相加得到了一个新的对象 7,由于一个对象不能覆盖另一个对象,则 n 指向新的对象 7,而没有改变原对象。因此 a 的值未发生变化。虽然与 C 程序的结果一致,但与 C 程序的机制完全不同,C 程序之所以没改变 a,是因为调用函数时只发生了值传递,即只把 a 的值复制给了 n。

    不要混淆这两种赋值逻辑,它们有着完全不同的物理实现方式。

    不同的思维逻辑会导致不同的编写逻辑。尽管这两种逻辑在很多情况下的结果是一致的,但并不能就简单地认为它们是一致的。否则在一些小的细节方面出了错误,就会难以理解。只能死记硬背,把一些东西当作 Python 的特例来记,虽然「唯手熟尔」也可以让你走得很远,但思维正确时,不仅可以走得更远,也会走得更加轻松。

    比如,当你的思维清晰时,以下问题的答案自然也就水落石出了:

    为什么列表的方法的返回值大多是 None?

    为什么字符串的方法的返回值大多是一个新的对象?

    为什么 Python 中没有自增/自减运算符?

    为什么有的可变对象传入函数之后,却不能被函数修改“实参”的值?

    (比如将上面的 change 函数的主体改成 t = t[1:]。调用函数之后,a 所指向的对象并没有发生改变。)

    ……

    这些内容与本文主题不大相关,所以不再列出答案。

    有趣的补充:

    1. 数字是一个天然的不可变对象(immutable object)。

    对于 n = n + 2,有人可能会说,为什么不能把它看成像列表那样的修改,修改后 n 依然指向的是原对象,这样的话执行 add(a) 之后,a 就会变成 7 了,可为什么不是这样?

    因为每一个数字都是一个单个的对象,而对象不能覆盖对象。所以该句实际上是: a 指向的对象加上对象 2,产生了一个新的对象,然后令 a 指向了新对象 a + 2。

    因此,数字类型并不存在修改这一说,它是一个天然的不可变对象。

    2. 为什么 Python 中没有自增(++)、自减(--)运算符?

    自增或自减运算符,在 C 语言中很常用,简洁实用。但在 Python 中却一定不会有。上节说到,数字是天然的不可变对象,所谓自增就是自身增加,所以它无法自增。它只能从一个对象指向下一个对象。可以这样写 a += 1。

    3. 既然 Python 更改的只是引用关系,那么如何复制一个列表?

    a = [1, 2, 3]

    b = a

    # 这样做不能复制一个列表,a 和 b 指向的都是列表 [1, 2, 3]

    # 答案:

    ## 1. 使用 list 的 copy 方法

    b = a.copy()

    ## 2. 使用 slice 操作

    b = a[:]# slice 操作返回一个新的对象

    最后一章 回顾

    本文的章节安排是基于便于讲解的内容逻辑。这里给出文章的思维逻辑,以便回顾:

    Python 与 C 语言的赋值逻辑差异

    一个直接操纵数据,一个间接操纵数据

    为什么需要这种赋值逻辑

    帮助实现对象之间的交互

    对象不可被直接摧毁(覆盖)

    可以修改可变对象的值

    ……

    为什么想要对象之间进行交互(面向对象设计的内容)

    如何使用这种赋值逻辑

    从左向右阅读/编写一个表达式

    使用对象交互来设计、理解程序

    为什么可变对象可以更改“实参”,而不可变对象不可以

    为什么没有自增/自减运算符

    需要复制一个可变对象怎么办

    ...

    展开全文
  • python中变量和赋值语句是什么发布时间:2020-11-03 09:45:52来源:亿速云阅读:75作者:小新这篇文章将为大家详细讲解有关python中变量和赋值语句是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读...
  • 困惑的查找答案过程发现了id()id() 表示的是对应的内存地址案例1:>>> a=1>>> b=2>>> id(1)39355320>>> id(a)39355320>>> id(b)39355308>>> b=3>>> id(b)39355296>>>请输入id(2)和id(3),比较输出的结果比较发现...
  • 困惑的查找答案过程发现了id()id() 表示的是对应的内存地址案例1:>>> a=1>>> b=2>>> id(1)39355320>>> id(a)39355320>>> id(b)39355308>>> b=3>>> id(b)39355296>>>请输入id(2)和id(3),比较输出的结果比较发现...
  • 变量什么是变量:表示世间万物变化得量叫做变量,相当于一个不停变化得值例:x=10常量什么是常量:常量就是不会变化得值,叫做常量/由于在python中并没有用于解释常量得方式,所以大家都用一种约定俗称得方式表示...
  • Most sources online call = (and +=, -=, etc...) an assignment operator (for python). This makes sense in most languages, however, not in python. An operator takes one or more operands, returns a value...
  • 说明:本文主要以理解 Python 赋值、参数传递运行机制为主,可能其中的观点不一定严谨,如果有不对的地方,还望指出,先谢过啦学习编程的过程我们都会遇到很多定义,之前遇到这些定义的时候,我有一种强迫症...
  • 在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句,多条语句组成代码块,多个代码块再组成一整个程序。python的核心其实是由语句和表达式组成。所以这里简单探讨一下...
  • 按引用赋值而不是拷贝副本在python中,无论是直接的变量赋值,还是参数传递,都是按照引用进行赋值的。计算机语言,有两种赋值方式:按引用赋值、按值赋值。其中按引用赋值也常称为按指针传值(当然,它们还是...
  • 可变数据类型,与不可变数据类型是指向同一个内存地址的,python赋值是只是把变量的内存地址赋值给另一个变量,这一点可以使用python的内建方法id()来进行测试,对于你给的例子:我们假设'QH'这个字符串内存的...
  • 这两天又回头看了看python中赋值、浅拷贝和深拷贝,以前看的时候总觉得他们之间有关系,但又理不清楚,今天总算有了点头绪,所以跟大家分享一下我的理解。先说说赋值,其实python中赋值其实是赋值了一个引用,...
  • python的变量与赋值1.变量的命名规则变量其实通过一个标记调用内存的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错。下面总结了一下变量的命名...
  • 学习python过程数组是个逃不过去的一个关,既然逃不过去咱就勇敢面对它,学习一下python中数组如何使用。 1、数组定义和赋值python定义一个数组很简单,直接 arr = ; 现在arr数组已经被赋值了三个元素,其实这...
  • 这个信息纷繁的代码世界,我们应该如何更好地储存信息,让计算机...这里,name就是一个变量,这行代码的意思,就是把“昆明SEO”【赋值】给了“name”这个【变量】。这就好比,为了让昆明SEO以后能计算机...
  • python的变量与赋值1.变量的命名规则变量其实通过一个标记调用内存的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错。下面总结了一下变量的命名...
  • 这篇Python学习教程将手把手教你入门学Python,从变量和赋值语句学起,前面也有专门给大家出过相关的详细教程,有需要的伙伴,可以找一下前面的教程!导读:本文,你会学到如何处理数字、定义与使用变量和常量,...
  • python链式赋值

    2019-06-19 16:12:00
    其他语言,先不说这样写能不能编译通得过(我也没有试过),即使是通过,最终的赋值结果也不一定是这么个意思在python里,这是可以的 这是一个值两个变量 那么 一个变量两个值呢 a = "com", "python" 来猜...
  • 0.请编写用例并加以说明,解释Python中赋值拷贝、深拷贝与浅拷贝的区别 赋值拷贝: #赋值拷贝: 直接赋值 # 就是两个变量同时指向同一个地址, # 原列表,被赋值的也会改变,只是多个一个引用的对象 源代码: a = ...
  • 在python中,表达式是由变量和字符串组成的,它们之前如果用一个“=”相连的话,就变成了一个赋值语句,接下来小编就为大家讲解赋值语句的其中一种:序列赋值语句。 序列赋值的语法如下(右边的对象我们通常叫的是...
  • 完成了Python的搭建过程和编码工具安装之后,我们又了解了一下Python的编码的规范性的知识。测试凯哥:软件测试学Python(四):Python编码必备基础知识​zhuanlan.zhihu.com本文对Python中的各种运算符做一个简单...
  • Python中赋值运算符

    2020-03-29 15:33:18
    关于Python中赋值、拷贝、浅拷贝、深拷贝、小整数池、地址、可变数据类型、不可变数据类型的理解,用具体例子说明
  • python增强赋值语句

    2020-02-15 23:15:38
    python的增强赋值语句是从C语言借鉴来的,它有输入更少,执行更快,有优化技术自行选择等优点,建议程序多加使用。 常用的增强赋值语句有: x += y x -= y x &= y x |= y x *= y x /= y 等等… 其中需要...
  • python中list赋值问题

    2019-12-19 23:38:46
    有些时候我们for循环想把某一个list或者dict赋值给一些元素,比如下面这种场景: 我们想得到的是lst2的值是 [0] [0, 1] [0, 1, 2] [0, 1, 2, 3] [0, 1, 2, 3, 4] 但是结果是 [0, 1, 2, 3, 4] [0, 1, 2, 3,...
  • python 赋值

    2018-10-24 17:55:53
    在python中,将下列的方式称为增强赋值: 增强赋值语句 等价于语句 x+=y x = x+y x-=y x = x-y x*=y x = x*y x/=y x = x/y 其它类似结构:x&=y x|=y x^=y x%...
  • 1.在Python中,"=" 是赋值语句,我们可以把任意数据类型赋值给变量,同一个变量可以反复赋值。如下: a = 10 a = 'abc' 我们不需要对变量声明类型,这种方式更加灵活,赋值语句看上去很简单:就是将“=”右边的量...
  • python变量赋值如何定义操作

    千次阅读 2019-07-15 09:47:36
    python变量赋值如何定义操作 变量定义方法很简单: x = 5 这个操作过程就是赋值意思把整型数字5赋值给了变量x,用等号来连接变量名和值。之后就可以表达式使用这个新变量了。 x * 3 15 注意:在赋值时...
  • python中赋值操作

    2019-07-25 15:50:11
    本篇博客的内容翻译自《learning the python》,但是也添加了一些自己的理解。 文章目录前言赋值语句的形式序列赋值扩展序列操作总结 前言 我们使用赋值表达式将一个名字分配给一个对象。它的基本形式下,左边是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,771
精华内容 22,308
关键字:

在python中赋值的含义是

python 订阅