函数

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。函数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

def 函数 function

函数是可以重复执行的语句块,可以重复调用

  作用:

    1. 用于封装语句块,提高代码的重用性

    2. 定义用户级别的函数

3.函数外部不可以访问函数内部的变量空间,在函数内可以访问函数外的变量,但不能修改此变量,

  出了函数,变量的值又变会全局变量的值

4.如果函数内部没有return返回值,那么函数调用完毕后默认返回None

5. 如果函数想要返回其他对象需要返回return语句

6、以后不要用sum list…做变量名,因为你用完后,sum 函数将不能求和,list函数将不能格式化列表

  x = int(input(“请输入数字:”))  当需要返回值是数字时,需要把input的返回值整型格式化

      print()函数输出的时候如果遇到数字,需要将数字str()字符串格式化

函数没有返回值时:返回None

函数return返回一个值时:返回object

函数return返回多个值时:返回tuple

传参

位置传参:实参和形参的位置必须一一对应

序列传参:用*,序列拆解的位置与形参一一对应

函数
函数

1 def myfun1(a,b,c):
2     print('a的值是:', a)
3     print('b的值是:', b)
4     print('c的值是:',c)
5 s1 = [11,22,33]
6 myfun1(*s1)    #相当于myfun1(11,22,33)    myfun1(s1[0],s1[1],s1[2])
7 t1 = (44, 55, 66)
8 myfun1(*t1)
9 myfun1(*"ABC")

序列传参

 关键字传参:  按形参的名称给形参幅值,实参名必须与形参名进行匹配(形参与实参个数必须一一对应,不能不相等)

 字典关键字传参:指定实参为字典,将字典用’**’,拆解后在进行关键字传参的传参方式

函数
函数

 1 def myfun1(a, b, c):
 2     # 这是一个函数的传参示例,此函数以后不会改变代码
 3     print('a 的值是:', a)
 4     print('b 的值是:', b)
 5     print('c 的值是:', c)
 6 
 7 
 8 d = {'a': 100, 'b': 200, 'c': 300}
 9 myfun1(**d)  # 等同于 myfun1(a=100,b=200,c=300)
10 
11 # 下是错误做法
12 # d2 = {'a': 100, 'b': 200, 'c': 300, 'd': 400}
13 # myfun1(**d2)

字典关键字传参

说明:位置传参要在关键字传参(字典关键字传参)的左边

  def myfun1(a,b,c):

        pass

  #调用时

  Myfun(100,*[200,300])

  Myfun(*(100,200),300)

  Myfun(*[100],200,*[300])

  Myfun(100,c=300,100)    #错误

  Myfun(100,**{‘c’:300,’b’:200})

形参

  函数的缺省参数:

  def 函数名(形参名=默认实参1,形参2=默认实参2,。……………)

说明:缺省参数必须自左向右依次存在,如果第一个参数有缺省参数,那么其右侧的所有参数必须都为缺省参数

位置形参

语法:

      def 函数名(形参名1,形参名2,…)

             语句块

星号元组形参:

        语法:

              def 函数名(*元组形参名)

  语句块

作用:收集多余的位置传参,如果传入的是关键字,是接收不了的(空元组)

函数
函数

1 def func (*args):
2     print(“参数个数是:”,len(args))
3     print(“args:”,args)
4 fun()
5 fun(1,2,3,4)
6 fun(*”ABC”,1,2,3,None,False)

星号元组形参

 

命名关键字形参:

语法:

              def 函数名(*,命名关键字形参)  为什么关键字形参一定要加*号

                     语句块

              或

              def 函数名(*args,命名关键字形参)

                     语句块

              作用:强制索引的参数都必须用关键字传参或字典关键字传参

函数
函数

 1 def fa(*, a, b):
 2     print('a=', a)
 3     print('b=', b)
 4 def fb(*args, a, b):
 5     print("args=", args)
 6     print('a=', a)
 7     print('b=', b)
 8 
 9 # fa(b=1, a=2)
10 fa(**{'b': 200, 'a': 100})
11 #fb(1, 2, 3, 4, b=200, a=100)

命名关键字形参

双星号字典形参

       语法:

              def 函数名(**字典形参名)

                     语句块

       作用:收集多余的关键字传参

       说明:字典的形参名通常命名为”kwargs”

函数
函数

1 def fa(**kwargs):
2     print("关键字传参的个数是:", len(kwargs))
3     print('kwargs=', kwargs)
4 
5 
6 fa(name='tarena', age=15)
7 fa(a=1, b='BBB', c=[2,3,4], d=True)    #传入的是字典

双星号字典形参

 

函数的参数说明:

  位置形参,缺省参数,星号元组形参,双星号字典形参可以混合使用

  def name(位置形参,星号元组形参,命名元组形参,双星号字典形参):

实例:

       def fx(a,b,*args,c,**kwargs):

              pass

       fx(100,200,300,400,c=”c”,d=”D”,e=”E”)

 

函数的不定长参数:

       星号元组形参,双星号字典形参

       说明:

              可以接受任意的位置传参和关键字传参

       def fn(*aegs,**kwargs):

              pass

局部变量:local variable

       1、局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁

全局变量:global variable

       2、全局变量所有函数都可以访问(但函数内不能直接赋值)

args    作为函数的参数

locals()  返回局部变量的字典

globals()      返回全局变量的字典

作用:可以使用字典键索引来返回全局变量或者局部变量的值

函数变量

  函数名是一个变量,它在def语句创建函数时绑定一个函数

  函数可以用变量来绑定

函数
函数

def fa():
    print('你好')
def fb():
    print("")
f1 = fa  # 这里没有括号f1绑定的是函数
f2 = fb
f1()  # 调用f1绑定的函数
f2()  # 调用f2绑定的函数
def f1():
    print('')
def f2():
    print('')
f1, f2 = f2, f1
f1()  # 调用的是f2函数

函数变量

  把函数当做一个变量来玩

  一个函数,可以作为另一个函数的实参传递

函数
函数

1 def f1():
2     print("f1被调用:")
3 def f2():
4     print("f2被调用")
5 def fx(fn):
6     print(fn)
7     fn()
8 fx(f1)  # 这里调用的是fx
9 fx(f2)

函数传递

函数
函数

1 def myinput(fn):
2     L = [5,6,7,9,2]
3     return fn(L)
4 print(myinput(sum))#29
5 print(myinput(max))#9
6 print(myinput(min))#2
7 print(myinput(len))#5

传递函数

  函数可作为另一个函数的返回值

函数
函数

 1 def get_op():
 2     s = input("请输入你要操作的数:")
 3     if s=="求最大:":
 4         return max
 5     elif s=='求最小':
 6         return min
 7     elif s == '求和':
 8         return sum
 9 L= [2,3,5,7,4]
10 f = get_op()
11 print(f(L))

View Code
  

  函数的嵌套:

       函数的嵌套定义是指一个函数里用def语句来创建其他的函数的情况

函数
函数

1 def fn_outter():
2     print("fn_outter函数被调用")
3     def fn_inner():
4         print("fn_inner被调用")
5     fn_inner()
6     fn_inner()
7     print("fn_outter调用结束")
8 fn_outter()

View Code

 

global 语句

  作用:

  1、告诉解释执行器global语句声明的一个或多个变量,这些变量的作用域为模块级的作用域,也称作全局变量

  2、全局变量(global):

  将赋值语句操作的变量映射到模块文件内部的作用域

  语法:

    global 变量1,变量2,…..

  说明:

  1、全局变量如果要在函数内部被赋值,则必须经过全局变量声明(否则会被认识是创建局部变量)

      2、全局变量在函数内部不经过声明就可以直接访问()

      3、不能先声明局部变量,再声明为全局变量

      4、global变量列表里的变量名不能出现在此作用域的形参列表

nonlocal语句

      作用:告诉解释执行器,nonlocal语句声明的不是局部变量,也不是全局变量,他是外部嵌套函数内的变量

      语法:nonlocal 变量名1,变量名2,….

      说明:

  1、nonlocal只能被函数嵌套时使用

  2、访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作

  3、访问nonlocal变量只对最近一层变量进行操作

  4、nonlocal语句的变量列表里的变量名,不能出现在此函数的参数列表里

 

lambda 表达式(又称匿名函数)

      作用:创建一个匿名函数对象,但不提供函数名

  格式:lambda[参数1,参数2,…..]:表达式

    myadd = lambda x,y:x+y

  说明:

    1、lambda表达式创建的函数只能包含一条表达式

    2、lambda用来创建一个函数对象

 

eval()/exec()函数

  eval(srouce,globals=None,local=None)

        把字符串  srouce当成一个表达式来执行,返回表达式执行的结果

函数
函数

 1 x = 100
 2 y =200
 3 s = 'x+y'
 4 a = eval(s)
 5 b = eval("x+y",{'x':1,'y':2})
 6 c = eval("x+y",{'x':1,'y':2},{'x':34,'y':1})
 7 d = eval("x+y",{'x':1,'y':2},{'y':1})
 8 print(a)#300
 9 print(b)#3
10 print(c)#35
11 print(d)#2

View Code

 

  exec(srouce,globals=None,local=None)

        把一个字符串srouce当成程序来执行,返回表达式执行的结果

函数
函数

1 s = """print("hello world")
2 x =100
3 x += 200
4 print("x=",x)
5 """
6 exec(s)#hello world   x= 300

View Code

 

函数的文档字符串就是在开始写函数时,先用字符串说明该函数是用来做什么的

  函数内第一次未被赋值给任何变量得字符串是此函数的文档字符串

语法:

  def 函数名(参数列表):

    ’函数文档字符串’

    函数语句块

示例:

  def myfun(name,x):

    ”’这是函数的文档字符串

    name  表示人名

    x  表示钱数

    ”’

    pass

>>>help(myfun)

说明:

  1、文档字符串通常用来说明本函数的功能和使用方法

  2、在交互模式下输入:help(函数名) 可以查看函数的’文档字符串’

  3、函数的文档字符串绑定在函数的__doc__属性上

函数
函数

1 def fun():
2     "这是一段文档字符串"
3     pass
4 print(fun.__doc__)  #这是一段文档字符串

fun.__doc__

函数定义语句(def 语句) 的完整语法:
  [@装饰器1]
  [@装饰器2]
  […]
  def 函数名([位置形参], [*元组形参], [命名关键字形参], [**字典形参]):
  ”’文档字符串”’
  语句块

 注: [] 代表其内部可以省略

 

 

 复习:

  使用函数时,尽量少用全局变量,用函数传参来传递全局变量,这样可以避免,多个模块的文件,跨包(跨包取值)

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/159356.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!