是的,所以我正在做家庭作业,我被要求做以下事情:
创建一个名为student data的函数,它接受四个参数,一个名称(字符串),年龄(一个整数),学号(一个字符串)以及它们是否在CSCA08中注册(一个布尔值),并返回一个字符串以下列格式包含该信息:[学号,姓名,年龄,登记]。
您的代码应该如下工作:
>>> student_data("Brian",32,"1234567",False)
`[1234567,Brian,32,False]'
>>> student_data("Nick",97,"0000001",True)
`[0000001,Nick,97,True]'
我想出的是:
def student_data(name, age, student_number):
return '[' + student_number + ',' + name + ',' + str(age) + ']'
并在将其输入Python时:
student_data("Jeremy", 19, "999923329")
'[999923329,Jeremy,19]'
(注意我遗漏了关于布尔值的最后一点 - 我会在一秒钟之内完成。)
根据我的理解,'Jeremy'和'999923329'是字符串,它们随后作为第二行中字符串的一部分返回。对于'age',因为当我调用函数student_data时没有引号,它被Python解释为int。然后,我将该int值转换为字符串,所以我最终得到'[999923329,Jeremy,19]。
从技术上讲,我想我要问的是:参数'age'是否被python视为int,直到return函数将其更改为str类型?请注意,赋值需要四个参数,两个字符串(我有),一个int(我不知道它实际上是否被解释为int)和一个布尔值,它会导致以下内容:
我真的不知道布尔人是如何工作的。具体来说,在作业的背景下,我应该做什么?一个例子是什么?我把我的代码摆弄了一下,我想出了这个:
def student_data(name, age, student_number, boolean):
return '[' + student_number + ',' + name + ',' + str(age) + "," + str(boolean) + ']'
用Python输入:
student_data("Jeremy", 19, "999923329", True)
'[999923329,Jeremy,19,True]'
这实际上完全遵循了作业要求我做的事情,但我不喜欢它,因为我不太明白发生了什么。比如,'boolean'是函数student_data需要工作的参数。但究竟什么是参数?和变量一样吗?当我在python shell中输入'True'时,到底发生了什么?
当您为变量赋值时发生的事情是否相同?在那种情况下,当我为变量赋值时会发生什么?赋值是要求参数为布尔值,但我不相信我在代码中输入了布尔值,是吗?
是的,如果不是很明显,我以前从未有过计算机科学课。
答案 0 :(得分:8)
在Python中,有对象和名称。对象具有类型,名称只是指向对象的指针。如果一个对象没有名称,则无法访问它(事实上,如果没有指向对象的名称,Python将完全删除它。)
在其他语言中,名称通常称为变量,并且声明为特定类型。我已经阅读了一些关于变量是一个盒子的书,而这个盒子只能采取某种类型的东西,这就是价值。
Python的工作方式略有不同。与变量等价的名称没有类型。他们可以指向任何对象,更具体地说,任何类型的任何对象。
从技术上讲,我猜我所问的是:参数'age' 通过python认为是int,直到return函数将其更改为 str类型?请注意,赋值需要4个参数,2个字符串 (我有),1 int(我不知道它是否真的被解释了 作为int)和布尔
由于Python对类型不严格;你经常谈论对象。因此,当您将参数中的17
传递给函数时,您将传递对象 17
中的整数类型。
但是,age
只是一个名称,名称可以指向任何类型。由于您可以将任何对象传递给函数(换句话说,age
可以是任何有效的Python对象),因此将参数'age'视为int 是不正确的。它只是传递给函数的任何类型对象的占位符。
在函数体中,您通过将其他对象组合在一起来创建字符串对象。
当你要求它与另一个对象 - 任何其他对象组合时,字符串对象知道该怎么做。因为它不知道你会尝试什么,并与它结合;它有一些明智的默认值,并试图将东西转换为字符串。
如果无法执行此组合,则会出错:
>>> 'a' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
在那种情况下,我们想要做的是将对象2 转换为字符串。要对整数,或者真的 - 任何对象执行此操作,我们使用str()
方法(正如您所做的那样)。
那么当你将对象转换为字符串时会发生什么,创建一个全新的对象 - 它没有与原始对象的链接 - 并且是它的字符串表示。这是一个全新对象。完全不同的东西。
我真的不知道布尔人是如何工作的。具体而言,在上下文中 作业,我应该做什么?
好消息是,一旦你知道一个对象是如何工作的 - 所有对象的行为通常都是一样的。在Python中,当您知道如何获取一个对象的字符串版本时(通过执行str()
),您可以在每个其他对象上使用相同的技术。理解如何“转换”自己是最重要的。
换句话说 - 因为您知道str()
将获取一个对象并将其转换为其字符串表示形式;你可以放心,它可以与Python中的每个其他对象一起使用。
由于Python中的类型并不严格,它为程序员提供了这种灵活性,允许他们依赖对象来了解需要做什么。
这就是为什么str()
适用于布尔值和int和浮点数以及所有其他对象的原因。在您开始学习课程(这是创建自定义对象的方法)的学习后期,您将学习当有人对其进行str()
时如何控制对象会发生什么。
答案 1 :(得分:6)
Python中的变量是对象的标签。代码x = 7
将标签x
放在内存中代表7的对象上。这有点像所有变量都是指针。这意味着您可以使用标签x
代替数字7:
>>> y = x + 8
>>> print(y)
15
>>> x = "hello world!"
>>> print(x)
hello world!
函数有点像数学中的函数,需要一些输入并返回输出。
示例:
def f(x, y, z):
return x + y * z
在此示例中,x
,y
和z
是参数。然后我可以这样调用函数:
>>> print(f(1, 2, 3))
6
在这个例子中,1,2和3是参数。
参数是函数定义中的变量:
def f(x):
print(x)
return x + 7
>>> variable = f(5)
5
>>> print(variable)
12
>>> print(x)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
print(x)
NameError: name 'x' is not defined
在函数外部,未定义x
。这是仅在某些地方可访问的变量的概念,称为变量范围。
在您的函数中,参数age
应该被赋予类型为int
的参数。
调用它时,它返回变量age
指向的对象,转换为字符串。这不会改变那个对象。
您在代码中输入了一个布尔值,作为调用函数的参数:
student_data("Jeremy", 19, "999923329", True)
^
There is the Boolean!
Python没有严格的输入系统(它使用duck typing),所以你不必(实际上你不能)指定函数的参数类型应该是什么。因此,您实际上可以使用字符串,整数或为参数boolean定义的类的实例来调用函数。
答案 2 :(得分:2)
Python有无类型的参数。您可以传递任何具有__str__
方法的对象(字符串返回自己,ints返回自己的字符串表示形式......就像我所知的所有内置类型一样),并且您的函数可以正常工作。
通过使用Python,您的教授要求您“制作四个任意位置参数的函数,并以不同的顺序返回这些对象的字符串表示”。
答案 3 :(得分:0)
在Python中,我们没有任何变量类型,而且数据类型说什么Python甚至没有变量。在Python中,变量是指name
引用特定的value
。
示例:
my_var=4
my_var
是一个名称,它指的是4.在上面的语句中它是int但在下一个,
my_var="hello"
它是一个字符串。现在4没有人提到。 “你好”是my_var
所指的价值。
在此之后,只要您对引用值的操作正确,您就可以轻松推断数据类型对Python无关紧要。这完全取决于价值,而不是名称。
对于你的问题,
>>> student_data("Brian",32,"1234567",False)
[1234567,Brian,32,False]
考虑一下:
def student_data(name,age student_no):
age = age + 4 # Valid if the age is referring to number but invalid if age is string.
age = str(age) # If you want your number to be string then use str() function.
age = age + "test" # It is valid because age is referring to string now.
return "your string"
另请查看此演示:http://ideone.com/pYSl3l
文章 Python Basics: Understanding The Variables 以图片方式解释相同内容。