Python函数实例--如何声明和调用参数

258 阅读8分钟

当你第一次开始学习Python时,你会看到有大量的内置函数。你有像print() 这样的函数来打印输出到控制台,input() 来接收用户的输入,还有更多。

但是 Python 也给了你创建自己的函数和传递额外信息的自由,比如参数和论据。

在这篇文章中,你将学习如何声明函数以及如何声明带参数的函数。我们还将介绍在传入参数时如何调用函数。

让我们开始吧!

什么是函数?

一个函数是一个代码块,只有在被引用或调用时才会运行。

在任何编程语言中,函数的目的是帮助我们组织我们的代码,防止它重复。

当我们在程序的不同部分复制和粘贴相同的代码时,这可能是我们需要一个函数的信号。

函数是一段可重复使用的代码,是为了在程序的不同地方使用。

如果我们想重复某个动作,我们可以为它定义一个函数,并在需要时调用它。

如何在 Python 中创建一个函数

基本的语法是这样的:

def function_name(argument_name):
    body of function with the action to be taken on argument names

例如:"我是谁?

def hello_world_func():
    print("hello world")

让我们把它分解一下:

  • Python 中的一个函数是用def 关键字定义的。def 告诉 Python 一个函数定义即将开始。
  • 然后我们有一个函数的名字--在这个例子中是hello_world_func
  • 接下来我们有一组开括号和闭括号() 。在括号内,你可以传递零个、一个或多个逗号隔开的参数名称(或称为参数)和它们的可选缺省值。
  • 然后,我们有一个冒号: ,它是函数的开始。
  • 接下来是一个新的行,后面是一个缩进级别(你可以用键盘的4个空格或者用1个Tab来代替)。
  • 然后是正文,包括函数的内容和动作。
  • 最后,在函数的主体中还有一个可选的返回语句,在函数退出时向调用者传回一个值。

在上面的例子中,该函数不接受任何参数,也没有返回语句。这意味着它不返回任何东西,而且每当它被调用时,都会打印出hello world

请记住,如果你忘记了小括号() 或冒号: ,Python 会用一个SyntaxError 让你知道。

如何在 Python 中定义带参数的函数

参数是被传递到函数中的信息 (数据)。它们是参数的名称

一个参数是一个命名的占位符--一个变量--传递到函数中。

你把它列在函数的括号里,在函数的名称后面,在函数的定义行:

def hello_to_you(name):
    print("Hello " + name)

在我们的例子中,我们给出了一个参数,name ,这意味着我们的函数只接受一个参数的名字。

我们可以用f-string格式化来代替--它的工作原理和上面一样:

def hello_to_you(name):
    print(f"Hello {name}")

我们可以添加任意多的参数,都用逗号分隔:

def name_and_age(name,age):
    print(f"I am {name} and I am {age} years old!")

如何在Python中定义一个带有缺省值的参数

到目前为止,我们已经触及了没有默认值的函数。

但是我们也可以创建一个带有缺省值的参数:

def fave_language(language="python"):
    print(f"My favorite  programming language is {language}!")

如何在 Python 中调用函数

一旦你定义了一个函数,代码将不会自己运行。

为了执行函数中的代码,你必须进行函数调用,否则就是函数调用

然后,你可以随心所欲地多次调用该函数。

要调用一个函数,你需要:

  • 输入函数名称。
  • 函数名后面必须有括号。
  • 如果有任何必要的参数,它们必须在括号中传递。

从前面开始调用你的函数,它不吸收任何参数,看起来像这样:

def hello_world_func():
    print("hello world")
    

hello_world_func()
# prints "hello world" to the console

如何在 Python 中调用带参数的函数

参数,像参数一样,是被传递到函数中的信息。

参数是我们在调用函数时传入的实际值。

使用我们前面的例子,调用一个有一个所需参数的函数会是这样的:

def hello_to_you(name):
    print(f"Hello {name}")
    
hello_to_you("Timmy")
#Prints "Hello Timmy" to the console

在这种情况下,Timmy 是传入函数的值。

我们可以多次调用该函数,每次传入不同的值:

def hello_to_you(name):
    print(f"Hello {name}")
    
hello_to_you("Timmy")
hello_to_you("Kristy")
hello_to_you("Jackie")
hello_to_you("Liv")

#Output:
#"Hello Timmy"
#"Hello Kristy"
#"Hello Jackie"
#"Hello Liv"

位置参数是必需的

值得注意的是,所有的位置参数都是必需的

当我们调用我们的函数时,我们必须传入正确数量的参数,否则我们会得到一个错误。

比如我们有一个有两个参数的函数:

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")

如果我们调用我们的函数时只传入一个参数,像这样,我们会得到一个错误:

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")
    

hello_to_you("Timmy")

输出:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: hello_to_you() missing 1 required positional argument: 'last_name'

我们必须传入两个参数,因为我们在函数定义中列出了两个参数。

位置参数意味着函数调用中的第一个参数被用于第一个参数,函数调用中的第二个参数被用于第二个参数,以此类推:

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")
    

hello_to_you("Timmy","Jones")
#Prints "Hello,Timmy Jones" to the console
#you can visualise it like:
#first_name = "Timmy"
#last_name = "Jones"

参数的顺序很重要

参数也需要按照正确的顺序传递,根据它们被声明的顺序。否则,我们的输出将不是我们所期望的那样:

def fave_language(name,language):
    print(f"Hello, I am {name} and my favorite programming language is {language}")

    
fave_language("Python","Dionysia")
#output:
#Hello, I am Python and my favorite programming language is Dionysia

既然我们已经谈到了参数传递的顺序很重要,那么值得注意的是,如果我们像这样使用key = value 语法,那么顺序并不重要:

def fave_language(name,language):
    print(f"Hello, I am {name} and my favorite programming language is {language}")

    
fave_language(language="Python",name="Dionysia")
#output:
#Hello, I am Dionysia and my favorite programming language is Python

我们明确地提到参数和它们的取值,而不是仅仅列出参数。

如果我们想特别清楚地了解我们要传递的内容,这也有帮助。

这些被称为关键字参数

如何调用带有默认参数的函数

函数也可以接受默认值。

我们在前面看到,我们可以定义带有默认值的函数。有默认值的参数被称为默认参数

我们可以在不传递任何参数的情况下调用函数,它将使用我们在函数定义中指定的默认值。

def fave_language(language="Python"):
    print(f"My favorite  programming language is {language}!")
    
fave_language()
#prints "My favorite  programming language is Python!" to the console

在这种情况下,如果没有提供参数,语言将始终是 "Python"。

我们看到,带有默认值的参数是可选的

但是如果你想要的话,你可以覆盖默认值:

def fave_language(language="python"):
    print(f"My favorite  programming language is {language}!")
    
fave_language("Java")
#prints "My favorite  programming language is Java!" to the console

我们可以有一个或多个默认值传递给函数。

当我们调用函数时,我们可以不传入、传入一个、传入一些或全部默认参数。

这样我们也可以改变默认值,如果我们想这样做的话:

def personal_details(name="Jimmy",age=28,city="Berlin"):
    print(f"I am {name},{age} years old and live in {city}") 
    
#We can do:

personal_details()
#output:
#I am Jimmy,28 years old and live in Berlin

personal_details(age=30)
#I am Jimmy,30 years old and live in Berlin

personal_details(city="Athens",name="Ben",age=24)
##I am Ben,24 years old and live in Athens

让我们使用另一个例子,这次使用一个接受两个参数的函数:一个是位置性的、非默认的 (name) ,一个是可选的、默认的 (language):

def fave_language(name,language="Python"):
    print(f"My name is {name} and my favorite  programming language is {language}!")
    
fave_language("Dionysia")
#output:
#"My name is Dionysia and my favorite  programming language is Python!" 

我们看到,默认参数,langyage="Python"可选的,而位置参数,name 总是必须的。如果没有传入另一个language ,它将总是默认为Python。

在这种情况下,顺序又很重要。

如果我们换成这样做:

def fave_language(language="Python",name):
    print(f"My name is {name} and my favorite  programming language is {language}!")
    
fave_language("Dionysia")

我们会得到这样的输出:

 File "<stdin>", line 1
SyntaxError: non-default argument follows default argument

你可以看到,参数必须以特定的顺序进行。

我们首先添加所有必需的、位置性的参数。然后是可选的关键字参数

总结

在这篇文章中,你学会了如何在 Python 编程语言中声明函数和用参数调用它们。

我们首先介绍了如何创建简单的函数,以及如何用参数把数据传给它们。然后我们讨论了调用函数的不同方式。

谢谢你的阅读,祝你编码愉快