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

时间:2013-09-22 12:09:45

标签: python string function parameters boolean

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

创建一个名为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'时,到底发生了什么?

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

是的,如果不是很明显,我以前从未有过计算机科学课。

4 个答案:

答案 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

在此示例中,xyz是参数。然后我可以这样调用函数:

>>> 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 以图片方式解释相同内容。