python 函数(方法)的基本概念


一、函数(方法)的基本概念


函数是什么: 可以重复使用的代码块,这个代码块可以用来实现某些特定的功能。

       python 语言中也定义了很多函数,这些函数可以通过直接调用或者导包调用来使用。每一个函数都有自己独有的功能,比如 sum():获取全部数字的总和。。。。


1.1 python 函数的分类


  • Python中函数的分为以下几类:

    • 内置函数; 无需任何操作,直接就可以使用的函数,比如说 str()list()len()

    • 标准库函数: 通过 import 语句导入库,然后使用其中定义的函数

    • 第三方库函数: Python社区也提供了很多高质量的库,下载安装这些库后,也是通过 import 语句 到导入,然后可以使用这些第三方库的函数

    • 自定义函数: 根据实际需求个人自定义的函数方法



1.2 python 函数的定义


def: 声明函数的关键字
  • 定义无返回值函数的语法: def 函数名( [参数列表] ):

    无返回值函数: 执行完函数之后什么都不返回,调用者得不到任何数据
    • 代码示例:

      	def info(name,age,address):
      	    print(f"name:{name},sex:不锈钢铁人,age:{age},address:{address}")
      	
      	
      	info("姚青",999,"吉林省-吉林市-桦甸市")
      
      • 运行结果:在这里插入图片描述

  • 函数的返回值:如果函数体中包含 return 语句,则结束函数执行并返回值

    • 定义有返回值函数的语法: 在函数体中添加 return

      有返回值函数: 执行完函数之后将函数方法得到的结果返回给调用者
      • 代码示例:

        	def info(name,age,address):
        	    return f"name:{name},sex:不锈钢铁人,age:{age},address:{address}"
        	
        	print(info("姚青",999,"吉林省-吉林市-桦甸市"))
        
        • 运行结果: 在这里插入图片描述


1.3.1 函数的参数


  • 参数列表

      1. 圆括号内是形式参数列表,有多个参数则使用逗号隔开
      1. 形式参数不需要声明类型,也不需要指定函数返回值类型
      1. 无参数,也必须保留空的圆括号
      1. 实参列表必须于形参列表一 一 对应


1.3.1.1 参数的类型

  • 位置参数:函数调用时,实参默认按位置顺序传递,需要个数和形参匹配,按位置传递的参数,称为:"位置参数"
    •  	def f1(a,b,c): 
       	    print(a,b,c)
       	f1(2,3,4)
       	f1(2,3) #报错,位置参数不匹配 : TypeError: f1() missing 1 required positional argument: 'c'
      

  • 默认值参数:为某些参数设置默认值,这样这些参数在传递时就是可选的,称为"默认值参数",默认值参数放到位置参数后面
    • 注: 默认参数必须在普通参数后面写,否则传入会找不到对应参数的位置而报错

      •  	def f1(a,b,c=10,d=20): #默认值参数必须位于普通位置参数后面 
         	    print(a,b,c,d) 
         	f1(8,9) 
         	f1(8,9,19) 
         	f1(8,9,19,29)
        

  • 命令参数:按照形参的名称传递参数,被称为"命名参数",也称"关键字参数"
    • 注:如果有位置参数和关键字参数,关键字参数一定要放在位置参数的后面

      •  	def f1(a,b,c): 
         	    print(a,b,c) 
         	print(8,9,10) #位置参数 
         	f1(c=10,a=20,b=30) #命名参数 通过形参名称来匹配
        

  • 可变参数/不定长参数:可变参数指的是"可变数量的参数",分以下两种情况:

            *param:(一个星号),将多个参数收集到一个"元组"对象中
            **param:(两个星号),将多个参数收集到一个"字典"对象中
    • 注1:位置参数必须写在可变参数的前面

    • 注2:如果有多个关键字参数多出来的关键字参数以字典形式保存

    • 注3: 可变长参数扩展

      •  	def f1(a,b,*c):
         	    e = a+b
         	    for agr in c:
         	        e += agr
         	    return e
         	print(f1(8,9,19,20))
         	
         	
         	def f2(a,b,**c):
         	    print(a,b,c)
         	f2(8,9,name='longzai',age=18)
         	
         	def f3(a,b,*c,**d):
         	    print(a,b,c,d)
         	 #元祖打散
         	 print(*c)
         	f3(8,9,20,30,name='longzai',age=18)
        

  • 强制命名参数:在带星号的"可变参数"后面增加新的参数,必须在调用的时候是"强制命名参数"
    •  def f1(*a,b,c): 
          print(a,b,c) 
       #f1(2,3,4) #会报错,由于a是可变参数,将2,3,4全部收集,造成b和c没有赋值 
       f1(2,b=3,c=4)
      


1.3 函数的作用域

  • python中的作用域分4种情况:

    • L:local,局部作用域,即函数中定义的变量;

    • E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

    • G:globa,全局变量,就是模块级别定义的变量;

    • B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

      • 代码示例:
        •   		x = int(2.9)  # int built-in
            		a = 100 # 这个变量是全局变量 在整个Py文件里面都可以进行访问   globa
            ​
            		word = "hello"
            		def text():
            		    x = "hello" # 这个变量是在函数内部定义的变量,它是局部变量,只能在函数内部使用   local
            		    print('x = {}'.format(x))
            		    # 如果局部变量的名和全局变量同名,会在函数内部又定义一个新的局部变量
            		    # 而不是修改全局变量
            		    a = 10
            		    print('函数内部a = {}'.format(a))
            		    
            		    # 函数内部如果想要修改全局变量
            		    # 使用global对变量进行声明,可以通过函数修改全局变量的值
            		    global word
            		    word = 'ok'
            		text()
            		# print(x) #只能在函数内部使用
            		print('函数外部a = {}'.format(a))
            		print('函数外部word = {}'.format(word))
          
  • 注:在Python中 只有函数能够分割作用域



1.3.1 作用域的查找范围

        先是局部变量(L),其次是向外的或者lambda的局部作用域(E),之后是全局作用域(G),最后是内置作用域(B),如果变量名在这一查找过程中没有找到,Python会报错


1.3.2 内置函数

  • locals(): 查看全部局部变量

  • globals(): 查看全部全局变量

    • 代码示例:
      	a = 100 # 这个变量是全局变量 在整个Py文件里面都可以进行访问
      	
      	word = "hello"
      	
      	def text():
      	    x = "hello"  # 这个变量是在函数内部定义的变量,它是局部变量,只能在函数内部使用
      	    print('x = {}'.format(x))
      	    # 如果局部变量的名和全局变量同名,会在函数内部又定义一个新的局部变量
      	    # 而不是修改全局变量
      	    a = 10
      	    print('函数内部a = {}'.format(a))
      	
      	    # 函数内部如果想要修改全局变量
      	    global word
      	    word = 'ok'
      	
      	    print("locals = {},globals= = {}".format(locals(), globals()))
      	
      	text()
      	# print(x) #只能在函数内部使用
      	print('函数外部a = {}'.format(a))
      	print('函数外部word = {}'.format(word))
      


  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值