python函数概述_#Python中函数概述

Python中的函数

认识函数:在一个完整的项目中,某些功能会反复的使用。那么我们会将功能封装成函数,当我们要使用这个功能的时候

直接调用函数即可

**本质:**函数就是对功能的封装

优点:

1简化代码结构,增加了代码的复用度(重复使用的程度)

2如果想修改某些功能或者调试某些BUG,还需要修改对应的函数即可

参数:

**不可变类型:**类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

**可变类型:**类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

需求:编写一个函数,给函数一个字符串和一个年龄,在函数内部打印出来

形参(形式参数):定义函数时小括号中的变量,本质是变量。

参数必须按顺序传递,个数目前要对应

1.定义一个函数

定义函数:

格式:

def 函数名(参数列表):

语句

return 表达式

def:函数代码块以def关键字开始

函数名:遵循标识符规则

参数列表:(参数1,参数2,……,参数n):任何传入函数的参数和变量必须放在括号之间,用逗号分隔,函数从函数的调用者哪里木偶取得信息

冒号: 函数内容以冒号开始,并且缩进

语句:函数封装的功能

return:一般用于结束函数,并返回信息给函数的调用者

表达式:即为要返回给函数的调用者的信息

注意:最后的renturn 表达式,可以不写,相当于returnNone

2.值传递:

传递的是不可变类型

string,tuple,number是不可变得

引用传递:

传递的可变类型

list,dict,setdef funcl(num):#值传递

num = 10

temp = 20

funcl(temp)

print(temp)

#(输出)20

def func2(list):#引用传递

list[0] = 100

li = [1,2,3,4,5]

func2(li)

print(li)

#(输出)[100, 2, 3, 4, 5]

3.关键字

概念:允许函数调用时参数的顺序与定义时不一致def myprint(str, age):

print(str, age)

myprint(age = 18,str = "sunck is a god man")

#(输出)sunck is a god man 18

4.默认参数

默认函数:

概念:调用函数式,如果没有参数,则使用默认参数def myprint(str, age):

print(str, age)

myprint() # 不写报错

#(输出) TypeError: myprint() missing 2 required positional arguments: 'str' and 'age'

#设置默认参数值(要用默认参数,最好将默认参数放到最后)

def myprint(str = "sunck is a good man ", age = 18):

print(str, age)

myprint()

#(输出)sunck is a good man 18

myprint("jierui dood" , 17) #输出为 jierui dood 17

#(输出)jierui dood 17

def myprint(str,age1 = 18):#要用默认参数,最好将默认参数放到最后

print(str, age1)

myprint("sad") #输出 sad 18

5.不定长参数

概念:能处理比定义时更长的参数。

加*号的变量存放所有未命名的变量参数,如果在函数调用时没有指定参数,他就是一个空元组。def func(name):

print(name)

func("sunck","good","nice")# 这样会报错

#(输出)TypeError: func() takes 1 positional argument but 3 were given

#加*号的变量存放所有未命名的变量参数,如果在函数调用时没有指定参数,他就是一个空元组

def func(name,*args):

print(name)

print(type(args)) # arrgs 为一个元组

for x in args:

print(x)

func("sunck","good","nice") #这样就能输出

#(输出)sunck

good

nice

**6.代表键值对应的参数字典。

和*代表的意义类似def func2(**kwargs):

print(kwargs)

print(type(kwargs)) #字典

func2(x=1,y=2,z=3)

#(输出){'x': 1, 'y': 2, 'z': 3}

func2(1,2,3) #报错

#(输出)TypeError: func2() takes 0 positional arguments but 3 were given

7.任意参数def func3(*args,**kwargs):

pass#不写,输出空白语句

#(输出)

8.多位数的和def mysum(*q):

sum = 0

for i in q:

sum += i

return sum

print(mysum(1,2,3,4,5))

#(输出)15

9.匿名函数

概念:不使用def这样的语句定义函数,使用lambda来创建匿名函数

特点:

1 ,lambda只是一个表达式,函数比def简单

2, lambda的主题是表达式,而不是代码块,仅仅只能在lanbde表达式中封装简单的逻辑

3, lambde函数有自己的命名空间,且不同访问电脑自有参数列表之外的或者全局命名空间的参数

4, 虽然lambda是一个表达式且看起来只能写一行,与c和c++内联函数不同

格式:lambda 参数1,参数2,……,参数n:espression

**注意:虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率sum = lambda num1,num2:num1 + num2

print(sum(1,2))

#(输出)3

10.函数的返回值定义return

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值.def mysum(num1,num2):

#将结构返回给函数的调用者

return num1 + num2

#执行完return语句,该函数就结束,return后面的代码不执行

prnit("****U*")

res = mysum(1,2)

print(res)

#(输出)3 #并没有执行print("****U*")语句

11.全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。# 可写函数说明

def sum(arg1, arg2):

# 返回2个参数的和."

total = arg1 + arg2; # total在这里是局部变量.

print("函数内是局部变量 : ", total)

return total;

#(输出)函数内是局部变量 : 30

sum(10, 20) # 调用sum函数

print("函数外是全局变量 : ", total)

#(输出)函数外是全局变量 : 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值