在C语言中,当一个变量有多重特性时,那些声明是等价的?

平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。在这些Python解释器中,使用广泛的是CPython 。这里还是要推荐下小编的Python学习喂鑫*(同音):‘’七六二,四五九,五一零‘’不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2021最新的Python资料和0基础入门教程,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。

Python2 中相对路径的 import 会导致标准库导入变得困难(想象一下,同一目录下有file.py,如何同时导入这个文件和标准库 file)。Python3 中这一点将被修改,如果还需要导入同一目录的文件必须使用绝对路径,否则只能使用相关导入的方式来进行导入。

3. Python2 中存在老式类和新式类的区别,Python3 统一采用新式类。新式类声明要求继承 object,必须用新式类应用多重继承。

4. Python3 使用更加严格的缩进。Python2 的缩进机制中,1 个 tab 和 8 个 space 是等价的,所以在缩进中可以同时允许 tab 和 space 在代码中共存。这种等价机制会导致部分 IDE 使用存在问题。

1. 浮点数除法操作符“/”和“//”的区别

Python2:若为两个整形数进行运算,结果为整形,但若两个数中有一个为浮点数,则结果为浮点数;

Python3:为真除法,运算结果不再根据参加运算的数的类型。

Python2:返回小于除法运算结果的最大整数;从类型上讲,与"/"运算符返回类型逻辑一致。

2. 异常抛出和捕捉机制区别

7. for 循环中变量值区别

Python2,for 循环会修改外部相同名称变量的值

Python3,for 循环不会修改外部相同名称变量的值

17. 比较操作符区别

Python2 中任意两个对象都可以比较

Python3 中只有同一数据类型的对象可以比较

6.深拷贝和浅拷贝的区别是什么?

深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。

假设B复制了A,修改A的时候,看B是否发生变化:

如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)

如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同值)

浅拷贝(shallowCopy)只是增加了一指针指向已存在的内存地址。

深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存

使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。

浅拷贝:仅仅时指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。

深拷贝:在计算机中开辟一块新的内存地址用于存放复制的对象。

但是在python中,对浅拷贝和深拷贝,还需要分数据类型是可变类型还是不可边类型。可变数据类型 ,不可变数据类型

位:"位(bit)"是电子计算机中最小的数据单位。每一位的状态只能是0或1。

字节:8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。

help 函数返回帮助文档和参数说明:

dir 函数返回对象中的所有成员 (任何类型)

11.当退出 Python 时是否释放所有内存分配?

答案是否定的。那些具有对象循环引用或者全局命名空间引用的变量,在 Python 退出是往往不会被释放,另外不会释放 C 库保留的部分内容

字典是我在 C++和 Java 中没有见过的数据结构,它拥有键-值对

字典是可变的,我们也可以用推导式的方式创建它.

如果我们不知道将多少个参数传递给函数,比如当我们想传递一个列表或一个元组值时,就可以使用*args。

当我们不知道将会传入多少关键字参数时,使用**kwargs 会收集关键字参数。

使用 args 和 kwargs 作为参数名只是举例,可以任意替换。这里还是要推荐下小编的Python学习喂鑫*(同音):‘’七六二,四五九,五一零‘’不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2021最新的Python资料和0基础入门教程,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。

对于 Python 的基础题任何疑问,请在评论区提问。

与正索引不同,负索引是从右边开始检索。

同样可以用于列表的切片:

15. 如何随机打乱列表中元素,要求不引用额外的内存空间?

join 函数可以将指定的字符添加到字符串中。

split 函数可以用指定的字符分割字符串

验证 Python 是否区分大小写的方法是测试 myname 和 Myname 在程序中是不是算同一个标识符。观察以下代码的返回结果:

如你所见,这里出现了 NameError,所以 Python 是区分大小的语言。

Python 中的标识符可以是任意长度,但必须遵循以下命名规则:

1. 只能以下划线或者 A-Z/a-z 中的字母开头。

4. 关键字不能作为标识符。Python 有以下这些关键字

19.如何删除字符串中的前置空格

前置空格是第一个非空格字符前的所有空格,使用 lstrip 函数来删除.

如图这个字符串既包含前置空格也包含后置空格. 调用 lstrip 函数去除了前置空格。如果想去除后置空格,使用 rstrip 函数。

我们在写代码时,有时可能只写了函数声明而没想好函数怎么写,但为了保证语法检查的正确必须输入一些东西。在这种情况下,我们使用 pass 语句。

类似的 break 语句可以跳出循环。

continue 语句可以跳到下一轮循环。

如果在一个内部函数里。对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就是一个闭包。

//运算符执行地板除法,返回结果的整数部分 (向下取整)。

用/符号除法结果为 3.5。

% 是取模符号。返回除法后的余数。

23.Python 中有多少种运算符,解释算术运算符。

这类面试问题可以判断你的 Python 功底,可以举一些实例来回答这类问题。

在 Python 中我们有 7 中运算符:算术运算符、关系 (比较) 运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。

\1. 加号 (+) 将两个对象的值相加。

\2. 减号 (-) 将第一个对象的值减去第二个对象的值。

\3. 乘号 (*) 将两个对象的值相乘。

\4. 除号 (/) 将第一个对象的值除以第二个对象的值。

关于地板除法、取模和取幂,请参考上一个问题。

关系运算符用来比较两个对象。

\2. 判断大于 (>):如果符号左边的值比右边大则返回 True。

出现上面的错误结果是因为 Python 的浮点运算存在一些 Bug。

\4. 大判断于等于 (>=):如果符号左边的值大于或等于右边则返回 True。

\5. 判断等于 (==) 如果符号两边的值相等则返回 True。

\6. 判断不等于 (!=) 如果符号两边的值不等则返回 True。

此运算符按二进制位对值进行操作。

\2. 或 返回按位或结果

\3. 异或 (^) 返回按位异或结果

\4. 取反 (~) 返回按位取反结果

除十进制以外,在 Python 中还可以使用二进制、八进制、十六进制。

\1. 二进制数有 0 和 1 组成,我们使用 0b 或 0B 前缀表示二进制数

使用 bin 函数可以将数字转换为二进制

27.如何获取字典中的所有键?

使用 keys 来获取字典中的所有键

28.问什么标识符不建议使用下划线开头?

因为在 Python 中以下划线开头的变量为私有变量,如果你不想让变量私有,就不要使用下划线开头。

29.什么是元组的解封装?

首先我们来介绍元组封装:

现在我们要将这些值解封装到变量 x,y,z 中

python2有非浮点数准备的int和long类型。int类型最大值不能超过sys.maxint,而且这个最大值是平台相关的。

可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。

python3里,只有一种整数类型int,大多数情况下,和python2中的长整型类似。

Python3中有6种基本数据类型,列表(list)、元组(tuble)、字典(dict)、集合(sets)、字符串(string)、数字(digit)。

1)先建立一个新的空列表,通过遍历原来的列表,再利用逻辑关系not in 来去重。此方法保证了列表的顺序性。

2)将列表转化为集合再转化为列表,利用集合的自动去重功能。简单快速。缺点是:使用set方法无法保证去重后的顺序。

切片,是一个比较生疏的名词,这是现代计算机编程语言或者说Python里的一个概念,大致意思是从一个集合里切出一块来,就像切一块豆腐,一刀下去切出两块豆腐,问题是两刀能切出几块?开个小玩笑!

先看一个函数range、返回值是列表,内容和传入range的函数有关。

明白了,range可以产生从1到20共20个元素的列表,range的第二个参数不包含这个值,但包含第一个参数的值,每个元素值相差为1。

回到正题,切片是对有序的集合而言,意思从有序集合里提取数据构成子集集合,给定提取的起点start、终点end以及方向上的步长step,能否切出非空子集,起点start需能沿步长方向上到达终点。

字符串和列表、元组都是有序集合,均可实现切片操作,以列表为例给出切片的语法格式如下:

上边range(1, 21)和切片里的start、end是呼应一致的,含起点start对应的值而不含终点end所对应的值。

子集的构成是从start开始每step取一个数据一至到end-1位置结束,step默认为1时,可以省略不写。

从print b这条语句的打印结果[‘t’, ‘h’, ‘o’]可知,'t’在a列表的index为2,‘n’字符的index为5,那么a[2:5]的step为1,从’t’开始逐个取回字符’t’、‘h’、'o’组成新的列表的子集b,而字符’n’的index为5,5作为取切片操作a[2:5]里的终点,其字符’n’不取回。从例子可以看出step 为1可以理解为“逐个取”。

step可以大于1,这个时候对于step的理解可以这样认为,每step个取一个。

对于列表a取切片a[2 : 5 : 2], 从index为2开始,每2个元素为一组取每组的第一个数据值,一只到index为5结束,但不取index为5的数据。

a[2 : 5 : 2]具体操作是这样的,从index为2的字符’t’开始,到index为5的字符’n’之前,每2个为一组(‘t’, ‘h’)、(‘o’, ‘n’)取每组的第一个元素值’t’、'o’即结果子集b的值。

从两行输出结果的第一行可以看出range函数可以产生一个从0开始到小于12的整数的列表,共12个数据。

定义一个元组很简单,将一堆数据用圆括号括起来,用逗号间隔各个元素即可定义一个元组,元组里的数据是只读的不可被修改。

一般三引号可以在Python源代码里用作多行注释或定义多行的字符串,另外Python可以用井号(#)进行单行注释。

字符串是有序不可修改的序列,可以通过索引或者for循环体访问字符串里的各个元素值。

字典的数据是由key:value对儿构成的每项数据,那么想访问某项数据的value需要可以通过运算来获得,其语法结构如下:

字典有个等价函数get可以获得这种方式的相同结果,语法结构如下:

get函数返回值就是这个key所对应的值。

但是如果无key的话,get返回None而不会报错发生异常,而用运算即字典名[key]则会报错异常。

还有一个函数setdefault 函数,它和get函数类似,返回指定键的值,如果键不在字典中,将会添加键并将值设置为一个指定值,默认为None。

get 和 setdefault 区别: setdefault 返回的键如果不在字典中,会添加键(更新字典),而 get 不会添加键。

13.下列关于光照贴图,说法错误的是?(C)

A.使用光照贴图比使用实时光源渲染要快

B.可以降低游戏内存消耗

C.可以增加场景真实感

D.多个物体可以使用同一张光照贴图

14.如何为物体添加光照贴图所使用的UV?(B)

A.不用添加,任何时候都会自动生成

C.更改物体导入设置,勾选“Swap UVs”

17.关于Vector3的API,以下说法正确的是?(C)

18.下列那些选项不是网格层属性的固有选项?(B)

浙江传媒学院《C语言程序设计》期终(考试)(A)卷

2005—2006 学年第二学期任课教师

一、选择题(共40分,每小题2分)

1、组成C语言程序的是()

2、下列字符序列中,合法的标识符是()

3、设n=10,i=4,则赋值运算n%=i+2执行后,n的值为()

4、下述程序的输出结果是()

5、执行下面程序中输出语句后, a的值是()

6、执行下列程序时输入:1234567,程序的运行结果为()

7、为了避免嵌套的条件语句if-else的两义性,C语言规定:else与()配对

A、缩排位置相同的if

8、执行下列程序,当输入2时输出的结果是()

我要回帖

更多关于 局部变量的特点 的文章

 

随机推荐