Python中的函数
函数是应用程序最重要的方面。函数可以定义为可重用代码的有组织块,可以在需要时调用它。
Python允许我们将大型程序划分为称为函数的基本构建块。该函数包含由{}括起来的一组编程语句。可以多次调用函数以为python程序提供可重用性和模块性。
换句话说,我们可以说函数集合创建了一个程序。该函数也称为其他编程语言中的过程或子例程。
Python为我们提供了各种内置函数,如range()或print()。虽然,用户可以创建其功能,可以称为用户定义的功能。
python中函数的优点
函数有以下优点。
通过使用函数,我们可以避免在程序中一次又一次地重写相同的逻辑/代码。
我们可以在程序中和程序中的任何地方多次调用python函数。
当它被分成多个函数时,我们可以轻松地跟踪大型python程序。
可重用性是python函数的主要成就。
但是,函数调用总是在python程序中开销。
创建一个函数
在python中,我们可以使用def关键字来定义函数。下面给出了在python中定义函数的语法。
def my_function():
function-suite
return <expression>
函数块以冒号(:)开头,所有相同级别的块语句保持相同的缩进。
函数可以接受定义和函数调用中必须相同的任意数量的参数。
功能调用
在python中,必须在函数调用之前定义函数,否则python解释器会给出错误。一旦定义了函数,我们就可以从另一个函数或python提示符调用它。要调用该函数,请使用函数名称,后跟括号。
下面给出了一个打印消息“Hello Word”的简单函数。
def hello_world(): print("hello world") hello_world()
输出:
hello world
功能中的参数
函数中的信息可以作为参数传递。参数在括号中指定。我们可以提供任意数量的参数,但我们必须用逗号分隔它们。
请考虑以下示例,其中包含一个接受字符串作为参数并打印它的函数。
例1
#defining the function def func (name): print("Hi ",name); #calling the function func("Ayush")
例2
#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中通过引用调用
在python中,所有函数都通过引用调用,即,对函数内部引用所做的所有更改都将恢复为引用引用的原始值。
但是,在可变对象的情况下有一个例外,因为对像string这样的可变对象所做的更改不会恢复为原始字符串,而是创建一个新的字符串对象,因此会打印两个不同的对象。
示例1传递不可变对象(列表)
#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);
输出:
list inside function = [10, 30, 40, 50, 20, 30] list outside function = [10, 30, 40, 50, 20, 30]
示例2传递可变对象(字符串)
#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)
输出:
printing the string inside function : Hi I am there Hows you printing the string outside function : Hi I am there
参数的类型
可能有几种类型的参数可以在函数调用时传递。
必需的参数
关键字参数
默认参数
可变长度参数
必需的参数
直到现在,我们已经了解了python中的函数调用。但是,我们可以在函数调用时提供参数。就所需的参数而言,这些是在函数调用时需要传递的参数,它们在函数调用和函数定义中的位置完全匹配。如果函数调用中未提供任何参数,或者参数的位置发生更改,则python解释器将显示错误。
请考虑以下示例。
例1
#the argument name is the required argument to the function func def func(name): message = "Hi "+name; return message; name = input("Enter the name?") print(func(name))
输出:
Enter the name?John Hi John
例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))
输出:
Enter the principle amount? 10000 Enter the rate of interest? 5 Enter the time in years? 2 Simple Interest: 1000.0
例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.
输出:
TypeError: calculate() missing 1 required positional argument: 'b'
关键字参数
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) func(name = "John",message="hello") #name and message is copied with the values John and hello respectively
输出:
printing the message with John and 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))
输出:
Simple Interest: 1900.0
如果我们在函数调用时提供不同的参数名称,则会引发错误。
请考虑以下示例。
例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 print("Simple Interest: ",simple_interest(time=10,rate=10,principle=1900)) # doesn?t find the exact match of the name of the arguments (keywords)
输出:
TypeError: simple_interest() got an unexpected keyword argument 'time'
python允许我们在函数调用时提供所需参数和关键字参数的混合。但是,必须在关键字参数之后给出必需的参数,即,一旦在函数调用中遇到关键字参数,以下参数也必须是关键字参数。
请考虑以下示例。
例4
def func(name1,message,name2): print("printing the message with",name1,",",message,",and",name2) func("John",message="hello",name2="David") #the first argument is not the keyword argument
输出:
printing the message with John , hello ,and David
以下示例将导致错误,因为在函数调用中传递了关键字和必需参数的不正确混合。
例5
def func(name1,message,name2): print("printing the message with",name1,",",message,",and",name2) func("John",message="hello","David")
输出:
SyntaxError: positional argument follows keyword argument
默认参数
Python允许我们在函数定义中初始化参数。如果在函数调用时未提供任何参数的值,则可以使用定义中给定的值初始化该参数,即使函数调用中未指定参数也是如此。
例1
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
输出:
My name is john and age is 22
例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
输出:
My name is john and age is 22 My name is David and age is 10
可变长度参数
在大型项目中,有时我们可能不知道要提前通过的参数的数量。在这种情况下,Python为我们提供了灵活性,可以提供逗号分隔值,这些值在函数调用时被内部视为元组。
但是,在函数定义中,我们必须使用*(star)将变量定义为* <variable - name>。
请考虑以下示例。
例
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")
输出:
type of passed argument is printing the passed arguments... john David smith nick
变量范围
变量的范围取决于声明变量的位置。在程序的一个部分中声明的变量可能无法被其他部分访问。
在python中,变量是使用两种类型的范围定义的。
全局变量
局部变量
已知在任何函数外部定义的变量具有全局范围,而已知在函数内定义的变量具有局部范围。
请考虑以下示例。
例1
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.
输出:
hello !! I am going to print a message. File "/root/PycharmProjects/PythonTest/Test1.py", line 5, in print(message) NameError: name 'message' is not defined
例2
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
输出:
The sum is 60 Value of sum outside the function: 0