创建一个包含四个参数的函数

Jer*_*emy 15 python string parameters boolean function

是的,所以我正在完成一项家庭作业,我被要求做以下事情:

创建一个名为student data的函数,它接受四个参数,一个名称(字符串),年龄(一个整数),学号(一个字符串)以及它们是否在CSCA08中注册(一个布尔值),并返回一个包含该信息的字符串按以下格式:[学号,姓名,年龄,登记].

您的代码应该如下工作:

>>> student_data("Brian",32,"1234567",False)
`[1234567,Brian,32,False]'
>>> student_data("Nick",97,"0000001",True)
`[0000001,Nick,97,True]'
Run Code Online (Sandbox Code Playgroud)

我想出的是:

def student_data(name, age, student_number):
    return  '[' + student_number + ',' + name + ',' + str(age) + ']'
Run Code Online (Sandbox Code Playgroud)

并在将其输入Python时:

student_data("Jeremy", 19, "999923329")
'[999923329,Jeremy,19]'
Run Code Online (Sandbox Code Playgroud)

(注意我遗漏了关于布尔值的最后一点 - 我会在一秒钟内完成.)

根据我的理解,'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) + ']'
Run Code Online (Sandbox Code Playgroud)

并在Python中输入:

student_data("Jeremy", 19, "999923329", True)
'[999923329,Jeremy,19,True]'
Run Code Online (Sandbox Code Playgroud)

这实际上完全遵循了作业要求我做的事情,但我不喜欢它,因为我真的不明白发生了什么.比如,'boolean'是函数student_data需要工作的参数.但究竟什么是参数?和变量一样吗?当我在python shell中输入'True'时,究竟发生了什么?

在为变量赋值时发生的事情是一样的吗?在那种情况下,当我为变量赋值时会发生什么?赋值是要求参数为布尔值,但我不相信我在代码中输入了布尔值,是吗?

是的,如果它已经不明显,我以前从未有过计算机科学课.

Bur*_*lid 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
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我们想要做的是将对象2转换为字符串.要对整数,或者真的 - 任何对象,我们使用该str()方法(正如您已正确完成).

那么当你将对象转换为字符串时会发生什么,创建一个全新的对象 - 它没有与原始对象的链接 - 并且是它的字符串表示.这是一个全新的对象.一个完全不同的东西.

我真的不知道布尔人是如何工作的.具体而言,在作业的背景下,我应该做什么?

好消息是,一旦你知道一个对象是如何工作的 - 所有对象的行为通常都是一样的.在Python中,当您知道如何获取一个对象的字符串版本时(通过执行str()),您在每个其他对象上使用相同的技术.要弄清楚如何"转换"自己是最重要的.

换句话说 - 因为你知道str()将接受一个对象并将其转换为它的字符串表示形式; 你可以放心,它可以与Python中的每个其他对象一起使用.

由于Python中的类型不严格,它为程序员提供了这种灵活性,允许他们依赖对象来了解需要完成的工作.

这就是为什么str()使用布尔值和int和浮点数以及所有其他对象的原因.在您开始学习类(这是创建自定义对象的方法)的学习后期,您将学习如何控制对象在其str()上进行操作时会发生什么.


rlm*_*lms 6

Python中的变量是对象的标签.代码x = 7将标签x放在内存中代表7的对象上.这有点像所有变量都是指针.这意味着您可以使用标签x代替数字7:

>>> y = x + 8
>>> print(y)
15
>>> x = "hello world!"
>>> print(x)
hello world!
Run Code Online (Sandbox Code Playgroud)

函数有点像数学中的函数,需要一些输入并返回输出.

例:

def f(x, y, z):
    return x + y * z
Run Code Online (Sandbox Code Playgroud)

在这个例子中x,yz是参数.然后我可以这样调用函数:

>>> print(f(1, 2, 3))
6
Run Code Online (Sandbox Code Playgroud)

在此示例中,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
Run Code Online (Sandbox Code Playgroud)

功能之外,x没有定义.这是仅在某些地方可访问的变量的概念,称为变量范围.

在您的函数中,该参数age应该被赋予该类型的参数int.调用它时,它返回变量age指向的对象,转换为字符串.这不会改变该对象.

您确实在代码中输入了一个布尔值,作为调用函数时的参数:

student_data("Jeremy", 19, "999923329", True)
                                          ^
                                     There is the Boolean!
Run Code Online (Sandbox Code Playgroud)

Python没有严格的键入系统(它使用duck typing),所以你不必(实际上你不能)指定函数的参数类型应该是什么.因此,您实际上可以使用字符串,整数或为参数boolean定义的类的实例来调用函数.