📅  最后修改于: 2020-10-24 09:11:54             🧑  作者: Mango
功能是应用程序最重要的方面。可以将函数定义为可重用代码的组织块,可以在需要时调用它。
Python使我们可以将大型程序划分为称为函数的基本构建块。该函数包含用{}括起来的一组编程语句。可以多次调用一个函数,以为Python程序提供可重用性和模块化。
该功能有助于程序员将程序分成较小的部分。它非常有效地组织了代码,并避免了代码的重复。随着程序的增长,函数使程序更有组织性。
Python为我们提供了各种内置函数,例如range()或print()。虽然,用户可以创建其功能,这些功能可以称为用户定义的功能。
功能主要有两种。
在本教程中,我们将讨论用户定义函数。
Python函数具有以下优点。
Python提供了def关键字来定义函数。下面给出了define函数的语法。
句法:
def my_function(parameters):
function_block
return expression
让我们了解函数定义的语法。
在Python,创建函数后,我们可以从另一个函数调用它。的函数必须在函数调用之前定义;否则, Python解释器将给出错误。要调用该函数,请在函数名称后加上括号。
考虑以下简单示例,该示例显示消息“ Hello World”。
#function definition
def hello_world():
print("hello world")
# function calling
hello_world()
输出:
return语句用于在函数的结尾,并返回该函数的结果。它终止函数执行并将结果转移到调用函数的位置。 return语句不能在函数外部使用。
句法
return [expression_list]
它可以包含被求值的表达式,并将值返回给调用者函数。如果return语句没有表达式或在函数本身不存在,则它返回None对象。
考虑以下示例:
# Defining function
def sum():
a = 10
b = 20
c = a+b
return c
# calling sum() function in print statement
print("The sum is:",sum())
输出:
在上面的代码中,我们定义了名为sum的函数,它具有语句c = a + b,该语句计算给定的值,结果由return语句返回给调用者函数。
# Defining function
def sum():
a = 10
b = 20
c = a+b
# calling sum() function in print statement
print(sum())
输出:
None
在上面的代码中,我们定义了没有return语句的相同函数,因为我们可以看到sum()函数将None对象返回给调用者函数。
参数是可以传递给函数的信息类型。参数在括号中指定。我们可以传递任意数量的参数,但是必须用逗号将它们分开。
考虑下面的例子,其中包含接受字符串作为参数的函数。
#defining the function
def func (name):
print("Hi ",name)
#calling the function
func("Devansh")
输出:
Hi Devansh
#Python function to calculate the sum of two variables
#defining the function
def sum (a,b):
return a+b;
#taking values from the user
a = int(input("Enter a: "))
b = int(input("Enter b: "))
#printing the sum of a and b
print("Sum = ",sum(a,b))
输出:
Enter a: 10
Enter b: 20
Sum = 30
在Python,按引用调用意味着将实际值作为参数传递给函数。所有函数都通过引用调用,即,在函数内部对引用所做的所有更改都将还原为引用所引用的原始值。
#defining the function
def change_list(list1):
list1.append(20)
list1.append(30)
print("list inside function = ",list1)
#defining the list
list1 = [10,30,40,50]
#calling the function
change_list(list1)
print("list outside function = ",list1)
输出:
#defining the function
def change_string (str):
str = str + " Hows you "
print("printing the string inside function :",str)
string1 = "Hi I am there"
#calling the function
change_string(string1)
print("printing the string outside function :",string1)
输出:
在函数调用时可以传递几种类型的参数。
到目前为止,我们已经了解了Python的函数调用。但是,我们可以在函数调用时提供参数。就所需的参数而言,这些是在函数调用时需要传递的参数,它们在函数调用和函数定义中的位置完全匹配。如果函数调用中未提供任何一个自变量,或者自变量的位置已更改,则Python解释器将显示错误。
考虑以下示例。
例子1
def func(name):
message = "Hi "+name
return message
name = input("Enter the name:")
print(func(name))
输出:
例子2
#the function simple_interest accepts three arguments and returns the simple interest accordingly
def simple_interest(p,t,r):
return (p*t*r)/100
p = float(input("Enter the principle amount? "))
r = float(input("Enter the rate of interest? "))
t = float(input("Enter the time in years? "))
print("Simple Interest: ",simple_interest(p,r,t))
输出:
例子3
#the function calculate returns the sum of two arguments a and b
def calculate(a,b):
return a+b
calculate(10) # this causes an error as we are missing a required arguments b.
输出:
Python允许我们在函数定义处初始化参数。如果在函数调用时未提供任何参数的值,那么即使未在函数调用中指定参数,也可以使用定义中给出的值来初始化该参数。
例子1
def printme(name,age=22):
print("My name is",name,"and age is",age)
printme(name = "john")
输出:
例子2
def printme(name,age=22):
print("My name is",name,"and age is",age)
printme(name = "john") #the variable age is not passed into the function however the default value of age is considered in the function
printme(age = 10,name="David") #the value of age is overwritten here, 10 will be printed as age
输出:
在大型项目中,有时我们可能不知道要预先传递的参数数量。在这种情况下, Python使我们可以灵活地提供逗号分隔的值,这些值在函数调用时在内部被视为元组。通过使用可变长度参数,我们可以传递任意数量的参数。
但是,在函数定义中,我们将* args(star)定义为*
考虑以下示例。
例
def printme(*names):
print("type of passed argument is ",type(names))
print("printing the passed arguments...")
for name in names:
print(name)
printme("john","David","smith","nick")
输出:
在上面的代码中,我们将* names作为可变长度参数传递。我们调用了函数并传递了在内部被视为元组的值。元组是一个与列表相同的可迭代序列。为了print给定的值,我们使用for循环迭代* arg名称。
Python允许我们使用关键字参数调用函数。这种函数调用将使我们能够以随机顺序传递参数。
参数的名称被视为关键字,并在函数调用和定义中匹配。如果找到相同的匹配项,则将参数的值复制到函数定义中。
考虑以下示例。
例子1
#function func is called with the name and message as the keyword arguments
def func(name,message):
print("printing the message with",name,"and ",message)
#name and message is copied with the values John and hello respectively
func(name = "John",message="hello")
输出:
示例2在调用时以不同顺序提供值
#The function simple_interest(p, t, r) is called with the keyword arguments the order of arguments doesn't matter in this case
def simple_interest(p,t,r):
return (p*t*r)/100
print("Simple Interest: ",simple_interest(t=10,r=10,p=1900))
输出:
如果在函数调用时提供不同的参数名称,将引发错误。
考虑以下示例。
例子3
#The function simple_interest(p, t, r) is called with the keyword arguments.
def simple_interest(p,t,r):
return (p*t*r)/100
# doesn't find the exact match of the name of the arguments (keywords)
print("Simple Interest: ",simple_interest(time=10,rate=10,principle=1900))
输出:
Python允许我们在函数调用时提供所需参数和关键字参数的混合。但是,不得在关键字参数之后给出必需的参数,即,一旦在函数调用中遇到关键字参数,则以下参数也必须是关键字参数。
考虑以下示例。
例子4
def func(name1,message,name2):
print("printing the message with",name1,",",message,",and",name2)
#the first argument is not the keyword argument
func("John",message="hello",name2="David")
输出:
以下示例将由于在函数调用中传递的关键字和必需参数的不正确混合而导致错误。
例子5
def func(name1,message,name2):
print("printing the message with",name1,",",message,",and",name2)
func("John",message="hello","David")
输出:
Python提供了传递多个关键字参数的工具,这些参数可以表示为** kwargs。它与* args相似,但它以字典格式存储参数。
当我们事先不知道参数数量时,这种类型的参数很有用。
考虑以下示例:
示例6:使用关键字参数的许多参数
def food(**kwargs):
print(kwargs)
food(a="Apple")
food(fruits="Orange", Vagitables="Carrot")
输出:
{'a': 'Apple'}
{'fruits': 'Orange', 'Vagitables': 'Carrot'}
变量的范围取决于声明变量的位置。在程序的一个部分中声明的变量可能无法被其他部分访问。
在Python,变量是用两种类型的作用域定义的。
已知在任何函数外部定义的变量具有全局范围,而已知在函数内部定义的变量具有局部范围。
考虑以下示例。
def print_message():
message = "hello !! I am going to print a message." # the variable message is local to the function itself
print(message)
print_message()
print(message) # this will cause an error since a local variable cannot be accessible here.
输出:
def calculate(*args):
sum=0
for arg in args:
sum = sum +arg
print("The sum is",sum)
sum=0
calculate(10,20,30) #60 will be printed as the sum
print("Value of sum outside the function:",sum) # 0 will be printed Output:
输出: