创建一个有四个参数的函数

Posted

技术标签:

【中文标题】创建一个有四个参数的函数【英文标题】:Create a function with four parameters 【发布时间】:2013-09-27 10:19:00 【问题描述】:

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

创建一个叫做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”是随后作为第二行字符串的一部分返回的字符串。对于“年龄”,因为当我调用函数 student_data 时没有引号,它被 Python 解释为 int。然后,我将该 int 值转换为字符串,因此我可以得到 '[999923329,Jeremy,19]'。

所以从技术上讲,我想我要问的是:参数'age'是否被python视为int,直到返回函数将其更改为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”时,到底发生了什么?

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

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

【问题讨论】:

一个推荐:def student_data(name, age, student_number): return '[, , ]'.format(name, age, student_number)。使用str.format 比使用+ 连接字符串更好。 Python 不会将数据“视为”某种类型 - 更改类型意味着使用另一个对象构造一个新对象。所以 Python 知道,要从整数生成字符串,需要以正确的顺序正确的数字。这不仅仅是将其标记为字符串的过程。 str() 使用给定值作为基础创建一个新值。您似乎对一门语言的基础知识了解不足 - 您可能应该阅读更多教程。 @user2387370,您可能指的是非常相似的问题:***.com/questions/18857723/… ***.com/questions/18854561/… 然而,这个问题有一些更具体的问题,所以我不会称它为重复。 参考这篇文章。对你有用codewithlogic.wordpress.com/2013/09/01/… 【参考方案1】:

在 Python 中,有 objectsnames。对象具有类型,名称只是指向对象的指针。如果一个对象没有名字,你就不能访问它(事实上,如果没有名字指向一个对象,Python 会完全摆脱它)。

在其他语言中,名称通常称为变量,并声明为特定类型。看过一些书,说变量就是一个盒子,盒子只能取某一种东西,就是值。

Python 的工作方式有点不同。与变量等价的名称没有类型。它们可以指向任何对象,更具体地说是任何类型的任何对象

所以从技术上讲,我想我要问的是:参数'年龄' 被python视为int,直到返回函数将其更改为 str 类型?注意赋值需要4个参数,2个字符串 (我有),1 int(我不知道它是否真的被解释过 作为一个 int) 和一个布尔值

由于 Python 对类型并不严格;你通常说的是对象。所以当你在一个函数的参数中传入17 时,你传入的是 object 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

在那种情况下,我们要做的是将 object 2 转换为字符串。要对整数或实际上任何对象执行此操作,我们使用str() 方法(正如您正确完成的那样)。

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

我真的不知道布尔值是如何工作的。具体来说,在上下文中 作业,我到底应该做什么?

好消息是,一旦您了解了一个对象的工作原理,所有对象的行为方式通常都相同。在 Python 中,当您知道如何获取一个对象的字符串版本时(通过 str()),您可以对每个其他对象使用相同的技术。由对象决定如何“转换”自己。

换句话说 - 因为您知道str() 将获取一个对象并将其转换为它的字符串表示形式;您可以放心,它将与 Python 中的所有其他对象一起使用。

由于 Python 中的类型并不严格,它为程序员提供了这种灵活性,允许他们依赖对象来了解需要做什么。

这就是str() 与布尔值、整数、浮点数和其他所有对象一起工作的原因。稍后在您的学习中,当您开始学习类(这是创建自定义对象的方法)时,您将学习如何控制当有人对您的对象执行 str() 时会发生什么。

【讨论】:

【参考方案2】:

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 定义的类的实例来调用函数。

【讨论】:

"变量是 Python 的一个标签,指向包含某些内容的内存地址。" - 嗯,不。它是一个对象的标签。有一个区别,最重要的是你不能指针算术。对象会在某个地方在内存中存储东西,是的,但这在 Python 中或多或少无关紧要。【参考方案3】:

Python 有无类型参数。您可以传递任何具有__str__ 方法的对象(字符串返回自身,整数返回自身的字符串表示......据我所知,所有内置类型也是如此),并且您的函数将起作用。

通过使用Python,您的教授要求您“创建一个包含四个任意位置参数的函数,并以不同的顺序返回这些对象的字符串表示形式”。

【讨论】:

【参考方案4】:

在Python 中,我们没有任何变量类型,而Python 甚至没有变量。在 Python 中,变量是指 name 指代特定的 value

例子:

my_var=4

my_var是一个名字,它指的是4。在上面的语句中是int,但在next中,

my_var="hello"

它是一个字符串。现在4没有被任何人提及。 "hello" 是 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也是用图片的方式解释的。

【讨论】:

@BurhanKhalid 的值我只指对象。

以上是关于创建一个有四个参数的函数的主要内容,如果未能解决你的问题,请参考以下文章

django的urls

具有单元格引用输入的自定义函数

Wpf动画如何移动grid?to属性好像只能为数字,但Grid定位有四个数据,并且执行动画方法参数

Django url (路由)

django——路由

C# 委托