当前位置:首页 > Python教程 > python技巧

Python学习笔记——函数

一、什么是函数

函数是可被调用的,可重复使用的,用来实现单一,或相关功能的代码段。

函数的作用:

  • 减少重复代码,提高应用的模块性
  • 保持代码的一致性
  • 增删改代码一次搞定,简单粗暴,更易扩展  

一、创建函数

1、定义一个函数的规则

  • 函数代码块以def关键字开头,后接函数标识符名称和()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
  • 函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明
  • 函数内容以冒号起始,并且缩进
  • return[表达式]结束函数,选择性返回一个值给调用方。如果没有return,则相当于返回None

语法:

            1
            def
             函数名 (参数列表)

            2     函数体

2、形参和实参

 形参:虚拟变量,在定义函数和函数体的时候使用形参。目的是在函数调用时接收实参,实参个数、类型要与形参一一对应。

 实参:调用函数时传给函数的参数。可以是常量、变量、表达式、函数。

形参不占用内存空间,形参变量只有在被调用时才分配内存单元。

             1
            import
             time

             2
            def
             action1(n):

             3
            print(Start action 1.)
 4    logger(n)
 5def action2(n):
 6print(Start action 2.)
 7    logger(n)
 8def action3(n):
 9print(Start action 3.)
10    logger(n)
11def logger(n):
12     time_format = %Y-%m-%d %X13     time_current = time.strftime(time_format)
14     with open(日志记录,a) as f:
15         f.write("%s End action %s.n"%(time_current,n))
16 action1(10)
17 action2(20)
18 action3(30)

 

3、函数的参数

  • 必需参数
  • 关键字参数
  • 默认参数
  • 不定长参数
  1. 无命名参数
  2. 有命名参数

 必需参数

必需参数在调用和声明时的数量及顺序必须保持一致。

关键字参数

函数调用时使用关键字参数来确定传入的参数值,按照参数名匹配参数值,使用关键在参数允许含在在调用时参数的顺序与声明时不一致。

默认参数

定义函数时,设定默认参数。当调用函数时,缺省参数如果没有值传入,则使用默认参数设定的值。

            1
            def print_info(name,age,sex=male):
23print(Name:%s%name)
4print(age:%s%age)
5print(Sex:%s%sex)
6return78 print_info(alex,18)
9 print_info(铁锤,40,female)

不定长参数

例1:

            1
            def add(*args):
2print(args:,args)
3     sum = 0
4for i in args:
5         sum += i
6return sum
7print(sum:,add(1,2,3,4,5))

输出:

args: (1, 2, 3, 4, 5)
sum: 15

例2:

            1
            def print_info(**kwargs):
2print(kwargs:,kwargs)
3     sum = 0
4for i in kwargs:
5print(%s:%s % (i, kwargs[i]))
67 print_info(name=oliver,age=20,sex=female)

输出:

kwargs: {name: oliver, age: 20, sex: female}
name:oliver
age:20
sex:female
*args用元组接收传入的参数,**kwargs用字典接收传入的键值对。

4、return

return的作用:

(1)结束函数

(2)返回某个对象

注意点:

如果不加return,默认返回None。

如果return有个对象,那么会将多个对象封装成一个元组。

遇到return语句,就会停止执行并返回结果。

5、函数的作用域

 L:local,局部作用域

 E:enclosing,函数嵌套作用域

 G:global,全局作用域

 B:built_in,python内置作用域

查找顺序:L→E→G→B

global关键字:

 例:(将local作用域中的变量声明为global作用域)

            1 count = 10
2def outer():
3global count    #打印前需先定义count的作用域4print(count)  #local variable ‘count‘ referenced before assignment5     count = 100
6print(count)
7 outer()

nonlocal关键字:

例:(将local作用域中的变量声明为enclosing作用域)

            1
            def
             outer():

            2     count = 10
3def inner():
4         nonlocal count  #先声明为enclosing作用域5         count = 20
6print(count)
7    inner()
8print(count)
9 outer()

 

在局部作用域,不能修改全局作用域的变量。

在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的

 

6、高阶函数

将函数名作为实参传给另一个函数使用。

            1
            def
             f(n):

            2
            return n*n
3def foo(a,b,func):
4return func(a)+func(b)
5print(foo(1,2,f))

输出: 5

函数不仅可以赋值,也可以作为函数的参数,还可以作为函数的返回值。

7、递归函数

 用递归函数实现打印斐波那契数列:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

前两项分别为:0和1,从第三项开始每一项是前两项之和,因此可得:f(n) = f(n-1) + f(n-2)

            1
            def
             fibo(n):

            2
            if n <= 2:
3return n - 1
4return fibo(n-1)+fibo(n-2)
56print(fibo(8))

输出: 13

递归函数特性:

  • 调用自身函数
  • 有一个结束条件

需要注意的是,凡是能用递归解决的问题,通过循环都可以解决,并且递归的效率比较低,一般只能递归998次,超出会报错。

 

8、内置函数

 eval()

eval()函数不仅可以将字符串转换为字典,还可以作为计算机使用。

            1
            print(eval(1+3/8*9))

输出: 4.375

下面是几个非常重要的内置函数:

filter(function, sequence)

 

            1 str = [a, b, c, d]
2def fun1(s):
3if s != a:
4return s
5 ret = filter(fun1, str)
6print(list(ret))  # ret是一个迭代器对象

输出: [‘b‘, ‘c‘, ‘d‘]

map(function, sequence)

            1 str = [hello, a, b]
2def fun2(s):
3return s + "alvin"4 ret = map(fun2, str)
5print(ret)  # map object的迭代器6print(list(ret))

输出:

<map object at 0x7f382ca0aba8>
[helloalvin, aalvin, balvin]

reduce(function, sequence, starting_value)

            1
            from functools import reduce
2def add1(x, y):
3return x + y
4print(reduce(add1, range(1, 101)))  ## 4950 (注:1+2+...+99)56print(reduce(add1, range(1, 101), 20))  ## 4970 (注:1+2+...+99+20)

输出:

5050
5070

lambda

            1
            def
             add(a,b):

            2
            return a + b
34print add(2,3)
567#匿名函数8 add = lambda a,b : a + b
9print add(2,3)

 

原文:http://www.cnblogs.com/pyramid1001/p/5844861.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐