python 视频笔记13(函数)

函数:

概述:在一个完整的项目中,某些功能会反复的使用,那么,会将功能封装成函数,当我们
需要使用这个功能的时候直接可以调用这个函数
本质:函数就是对功能的封装
优点
1:简化代码
2:增加代码的复用度
3:如果想修改某些功能或则调试某个BUG,只需要修改对应的函数即可

定义函数:

定义函数格式:
	def 函数名(参数1,参数2,···参数n):
		语句
		return 表达式
	函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
	任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
	函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
	函数内容以冒号起始,并且缩进。
	函数名一般遵循标识符规则

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
李磊 = “hello world”
print (李磊)
参数列表:(参数1,参数2,···参数n)
给函数额一些信息,任何传入函数的参数和变量必须放在 () 之间用 分割,函数从函数的调用者那里获取的信息
():参数列表的开始和结束
冒号:函数内容以冒号开始,并且缩进
语句:函数封装的功能
注意:最后的return表达式可以不写,如果不写 则默认的为return None
注意:最后的return表达式可以不写,如果不写 则默认的为return None
最简单的函数(无参数,我返回值)

def myPrint():
	print ("hello world")
	print ("hi world")

函数的调用:

格式:函数名字(参数列表)
函数名:要使用的功能的函数名字
参数列表:函数的调用者给函数传递的信息 如果没有()也不能省略()
函数调用的本质:实参给形参赋值的过程
print myPrint()
函数的参数
参数必须按顺序传递,个数并且要对应
需求
编写一个函数给函数一个字符串和一个年龄,在函数内部打印出来

def myPrint(str,age):#形参(定义函数时小括号中的变量;本质是变量)

myPrint("helllo world" , 18 )# 实参(调用函数时给函数传递的数据,本质是值)

函数的返回值:

需求
编写函数,实现功能,给函数两个数,返回这两个数的和

	def  mySum(num1, num2):
	#将结果返回到函数的调用者
		return num1+ num
	# 执行完return 该函数就结束了,return后面的代码不执行
	res = mySum(1,2)
	print (res)

传递参数:

值传递:传递的是不可变类型
string tuple number

def func1(num)
	num = 10 
temp = 20 
func1 (temp) # num = temp
print(temp)

引用传递:传递的可变类型
list dict set

def func2(lis):
	lis[0] = 100
li = [1,2,3,4,5]
func29(li)
print (li)

关键字参数:

概念:允许函数调用时参数得顺序和定义时不一致

def myPrint (str,age)
	print (str,age)
myPrint(age = 19,str = "hello world")

默认参数:

概念:调用函数时 如果没有传递参数,则使用默认参数
以后要用默认参数最好将默认参数放到最后

def myPrint (str= hellow word",age=18)
	print (str,age)

myPrint("hi word" 19)

不定长参数:

概念:能处理比定义时更多得参数
加了* 得变量会存放所有未命名得参数,如果函数调用时没有指定参数,他就是
一个空元组

def func(name , *arr):
	print (name)
for x in arr:
	print(x)
func("hello ","hi" )
def func (**kwargs):必须传关键字参数** 代表键值对得参数字典,和* 代表的意义类似
	print(kwargs)
func2(x=1 , y=2 ,z=3)

匿名函数:

概念:使用lambda来创建函数
lambda只是一个表达式,函数体比def简单
主体是一个表达式而不是代码块
lambda表达式封装简单得逻辑
有自己得命名空间,且不能访问自由参数列表之外得或全局命名空间得参数
虽然lambda是一个表达式且看起来只能写一行,与c和c++内联函数不同
格式:
lambda 参数1,参数2,···参数n:expression

	sum = lambda num1,num2:num1+num2
	print(sum(1,2))

装饰器:

是一个闭包,把一个函数当作参数传递返回一个替代版得函数,本质上就是一个返回函数得函数

def function():
	print("123123123")
	print("hello world")

简单得装饰器:

def function():
	print("hello world")
def   outer():
	print ("123123123")
	function()
outer()

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

def outer(function1):
   def inner():
   	pass
	print("123123123")
	function1()
   return inner
function1 = outer(function)
function1()

function1 是函数function得加强版

复杂一点得装饰器:

@outer  # 相当于sat = outer(say) 
#使用@将装饰器应用到函数
def say(age):#函数得参数理论上是无限制得,但实际上最后好不要超过6,7个
	print("tom is a $d years old " % (age))
	def outer(function):
		def  inner(age):
			if age < 0:
				age = 0
			function(age)
		return inner
#say = outer(say)
say(10)
say(-10)

偏函数:理论上不需要自己定义

import functools
	print(int("1010",base =10))

def int2(str,base=2):二进制
	return int(str,base)
print(int2("1010"))
#把一个参数固定住,形成一个新的函数
int3= functools.partial(int,base=2)
print (int3("111"))

变量得作用域:

变量可以使用得范围
程序的变量并不是在所有位置都能使用的,访问的权限决定于变量的位置,在那里赋值的
作用域:
局部作用域(常):

函数作用域:

全局作用域(常):

内建作用域:

###########################################################################################################################函数也是一种数据类型

def sum(a,b)
	return a + b
f = sum
aa = f(2,3)
res = sum(1,2)
print (res)

-----------> 5 3

猜你喜欢

转载自blog.csdn.net/qq_43377292/article/details/89406090