python初识函数

python初识函数

函数的定义和调用

#函数的定义:
	python定义函数使用def关键字

return[表达式]语句用于退出函数,选择性的向调用方返回一个表达式,不带参数值的return语句返回none
#代码示例: 
def func():		#定义函数
    print("hello world")	#函数主代码

func()	#调用函数

'''1.函数一定要遵循先定义后调用的原则
		大白话:定义函数的代码一定要比调用函数的代码先执行
 2.函数在定义阶段只检测语法不执行代码
 3.函数体代码只有在调用函数的时候才会执行
		调用函数的方式>>>:函数名加括号  # 如果有参数则传递参数
 4.函数名其实相当于是变量名指向的是内存中函数体代码所在的位置'''

#为什么使用函数?
答:函数的返回值可以确切知道整个函数执行的结果
 
函数的定义:

1、数学意义的函数:两个变量:自变量x和因变量y,二者的关系

2、Python中函数的定义:函数是逻辑结构化过程化得编程方法

函数的分类

1.内置函数

		python解释器提前定义好可以直接调用的函数
  	eg:len、open...  # 如何查看代码的内部源码ctrl+鼠标左键
        
2.自定义函数 #程序员自己编写的函数

	2.1.无参函数 	#调用无参函数:括号内也不需要写参数
    def index():
         print('hello world')
    index()
    
    2.2.有参函数 	# 在函数定义阶段括号内有参数
        def index(a):
         print('hello world',a)
    index(123)
    
    2.3.空函数 #在定义阶段函数体代码是用pass或者...占位
         def index():
             pass
           
"""
空函数感觉一点用都没有啊 但是非常有用
    前期能够通过空函数快速的罗列出程序中大致的功能
    让程序整体框架清晰  空函数大量的使用在项目前期的功能框架搭建
"""

函数的返回值

Python中,用 def 语句创建函数时,可以用 return 语句指定应该返回的值,该返回值可以是任意类型

'return 语句在同一函数中可以出现多次 但只要有一个得到执行 就会直接结束函数的执行'

return [返回值]

1.当函数体代码没有return关键字的时候 返回值是None
  	def index():
    	print('hello world')
    res = index()
    print(res)  # None
    
2.当函数体代码写了return但是没有跟任何值得时候 返回值也是None
  	def index():
    	print('hello world')
    	return 
		res = index()
		print(res)  # None
        
 3.当函数体代码写了return并且跟了数据 #那么写什么就返回什么
  		如果写的是值那么直接返回值(任意数据类型)
    	如果写的是变量名那么返回变量名指向的值
  	def index():
    	print('hello world')
    	name = 'jason'
    	return name
    res = index()
    print(res)  # jason
    
 4.return后面还可以跟多个值 逗号隔开  会自动组织成元组返回出去后
		def index():
    	print('春困秋乏夏打盹儿')
    	return 111,'jason',222
    res = index()
    print(res)  # (111,'jason',222)
    
   5.函数体代码遇到return会立刻结束函数运行
    '遇到了就立刻结束函数和循环的执行'
    

函数的参数

1.函数的参数可以分为两大类
	1.函数在定义阶段括号内写的参数 
		我们称之为'形式参数' 简称为>>>:形参
	2.函数在调用阶段括号内写的参数
		我们称之为'实际参数' 简称为>>>:实参

2.形参与实参的关系
	形参类似于是变量名、实参类似于是变量的值
		在调用函数的时候传入实参 会与形参临时绑定
		函数运行结束之后自动解除绑定
        
#代码示例:

def index(a,b):  # a和b就是index函数的形参
    print(a,b)
 index(1,2)  # 1和2就是index函数的实参

'	1会临时绑定给形参a 2会临时绑定给形参b   '    

    函数体代码运行期间 可以通过形参直接使用到实参
    
    函数体代码运行完毕之后 解除绑定 
    
    形参ab处于没有绑定值得状态 等待下一次函数调用传入实参进行绑定
    

位置参数

#位置形参

	在函数定义阶段括号内从左往右依次填写的变量名
  	def index(name,pwd):  # name和pwd就是位置形参
      pass

#位置实参

	在函数调用阶段括号内从左往右依次传入的真实数据
  	index('jason',123)  # jason和123就是位置实参
    
'''    我们在定义函数时形参数量只有一个,因此在调用函数时传入实参也必须是一个!如果传入的实参数量多余形参数量会出现错误'''


关键字参数

出现在实参中
	指名道姓的给形参传值 不需要遵循位置
  
def index(a, b):
    print(a, b)
index(b=111, a=222)  # 指名道姓的说形参a接收数据222 b接收数据

默认参数

默认参数就是定义函数时,形参给定一个值

#代码示例:
def register(name, age=18):
    print("用户名:%s 年龄:%s"%(name,age))
    
register('jason')	# 用户名:jason 年龄:18 

register('tony',20)		# 用户名:tony 年龄:20

'当我们调用函数时,如果没有给默认形参一个值作为实参,那么就会调用默认形参的值作为实参,因此会得到默认的值;
'

'如果我们在调用函数时输入了一个非默认形参值,这时候默认形参的值会发生变化,变为输入的那个值'

可变长参数

相当于一个无限大的容器,可以容纳很多个参数
无论传入多少关键字参数都可以正常执行
#代码示例:

def func(*a):
    print(a)
    
func()  # ()
func(1,2)  # (1, 2)
func(1,2,3,4,5,6)  # (1, 2, 3, 4, 5, 6)

# *号在形参中
    可以接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名

############################################################

# **在形参中
    用于接收多余的关键字参数 并且组织成字典的形式赋值给**后面的变量名
    
    
def index(a, b, **k):
    print(a, b, k)
index(a=1, b=2)  # 1 2 ={}

index(a=1, b=2, c=3, name='jason')  # 1 2 {'c': 3, 'name': 'jason'}

index(1,2,name='jason',age=18,pwd=123)  # 1 2 {'name': 'jason', 'age': 18, 'pwd': 123}

'''需求:定义一个函数 无论传入多少关键字参数都可以正常执行'''

def func(**k):
    print(k)
func()  # {}
func(a=1,b=2)  # {'a': 1, 'b': 2}
func(a=1,b=2,c=3,d=4)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}


#*和**不单单可以在形参中使用 还可以在实参中使用
def index(*args, **kwargs):
    print(args, kwargs)

posted @ 2022-03-16 17:56  洛阳城门听风雨  阅读(59)  评论(0)    收藏  举报