本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

Python基础-函数

一、为什么需要函数:

有时候,一些代码可能要在许多地方使用。如果采用传统的方式,一直重复编写相同的代码,那么代码将变得非常糟糕,并且非常难以维护。这时候我们就可以采用函数,来把一些重复执行的代码封装成一个函数,以后要再调用相同的代码的时候,就只要调用这个函数就可以了。

二、函数定义和调用:

  1. 定义函数:语法是使用def

    def 函数名(参数,可以为空): 代码块 # 示例: def greet(): print('hello world')
  2. 调用函数:语法是使用这个函数的名字,后面再给个圆括号:

    函数名(参数,可以为空) # 示例: greet()
  3. 函数参数:函数可以传递参数进去给函数:

    def add(a,b): print(a+b)
    • 形参:就是在定义函数的时候指定的参数。

    • 实参:就是在调用函数的时候传递进去的参数。

    • 位置参数:位置参数就是按照形参中给定的参数的顺序。

      def add(a,b): print(a+b) # 调用add add(1,2)

      在上例中,调用add函数,给的值a为1,b为2。这种位置很重要的参数叫做位置参数。

    • 关键字参数:在传递参数的时候,可以按照形参的名字给定参数。

      def add(a,b): print(a + b) # 调用add add(a=1,b=2) # 调换a和b参数的顺序来调用add函数 add(b=1,a=2)
    • *args和**kwargs:分别代表的是缺省的位置参数和关键字参数。

      def add(*args,**kwargs): print(args) print(kwargs) # 调用add add(1,2,a=3,b=4)

      其中1和2是位置参数,会保存在args中,a=3,b=4是位置参数,保存在kwargs中。
      传递到函数中的args是一个元组,kwargs是一个字典。

    • 元组和字典拆分出来成位置参数和关键字参数:

      a = ('a','b','c') b = {"username":"zhiliao","age":18} def greet(*args,**kwargs): print(args) print(kwargs) greet(*a,**b) # 将a这个元组个的元素一个个拆开来给`args`,将`b`拆开来一个个给`kwargs`
    • 默认参数:有时候一些参数,你可能需要给函数调用者,使用一个默认的参数,那么可以通过以下方式实现:

      def greet(name,age=18): print(name,age) greet('zhiliao') #age将使用18来作为默认参数 greet('zhiliao',age=20) #age将使用20来作为默认参数

      默认参数一定要放在其他参数的后面,但是放在缺省参数的前面。

  4. 函数返回值:函数可以有返回值:

    def add(a,b): return a + b

    可以使用元组来返回多个值:

    def greet(): return 'zhiliao',18

三、函数中变量的作用域:

  1. 局部变量:函数中的变量,不能在外面使用。

    def greet(): name = 'zhiliao' print('my name is %s'%name) print(name) # 报错,因为name只在greet函数中有用
  2. 全局变量:全局变量是在函数或者某个代码块外面定义的变量,可以在函数中进行使用。

    username = 'zhiliao' def greet(): print('my name is %s' % username) greet()
  3. global关键字:如果想在函数或者某个代码块中修改全局变量,那么应该使用global关键字。

    username = 'zhiliao' def greet(): username = 'ketang' # 此时不是修改全局变量username,而是定义一个与全局变量相同名字的变量 print('my name is %s' % username) greet() print(usernmae) # 这时候username仍然是`zhiliao`。
  4. 列表和字典当作全局变量:列表和字典当作全局变量,在函数或者代码块中使用的时候,可以任意的增删改查列表和字典的值。但是如果要修改这个全局变量指向的值,则必须加global关键字。

    persons = ['zhangsan','lisi'] def add_person(name): persons.append(name) add_person('wangwu') print(persons) # 这时候persons已经变成['zhangsan','lisi','wangwu']了。

    而如果你直接修改persons的指向,但没有使用global关键字,那么做的操作,将是在本地申请一个局部变量:

    persons = ['zhangsan','lisi'] def add_person(): persons = ['wangwu'] add_person() print(persons) # 仍然是'zhangsan'和`lisi`

四、匿名函数:

  1. 列表排序sort:使用sort给列表中的值进行排序的时候。如果列表中装的是字典,那么将不能正确的排序:

    l = [{'username':'zhangsan','age':18},{"username":'lisi','age':20}] l.sort()

    正确的写法应该是:

    l = [{'username':'zhangsan','age':18},{"username":'lisi','age':20}] def sort_key(x): return x['age'] # 根据年龄进行排序 l.sort(key=sort_key)
  2. 以上是定义一个函数来作为key,但是这个key的函数只需要用一次,以后再也用不到了,因此一般这种情况,我们可以使用匿名函数,也即lambda表达式,可以更好的完成我们的需求:

    l = [{'username':'zhangsan','age':18},{"username":'lisi','age':20}] l.sort(key=lambda x:x['age'])
  3. 自己动手写一个需要函数作为参数的函数:我们可以模范python自带的sort函数来实现一个做计算器运算的函数,我们让用户输入值,和计算方式:

    def calculate(x,y,func): return func(x,y) # 实现一个加法计算器 calculate(1,2,lambda x,y:x+y) # 实现一个减法计算器 calculate(2,1,lambda x,y:x-y) # 实现一个乘法计算器 calculate(1,2,lambda x,y:x*y) # 实现一个除法计算器 calculate(4,2,lambda x,y:x/y)

1644人已阅读,今天你学习了吗?

添加新回复