python long函数_python函数

一.函数的优点

使代码模块化

代码复用,减少冗余

保证了代码的一致性

python中的函数分为内置函数和自定义函数

内置函数: 如int(), str(), len(), range(), id(), max(), print()等,所有的内置函数参考

本章节来说说自定义函数的定义和使用

二.函数的定义和调用

定义格式:

def 函数名(参数列表):

语句1

语句2

...

参数列表可以为空,但是括号不能省略

理解形参,实参,位置参数,关键字参数

#无参定义

def say_hello(): #函数定义

print("hello dear.")

say_hello()#函数调用

#带有参数的定义

def get_max(a, b): #形参(形式参数)

if a >b:print(a)else:print(b)

get_max(3, 5) #传递实参,与形参位置对应,个数也与形参相对应,会按顺序传参(位置参数)

get_max(b=5, a=12) #关键字参数调用,这里就可以与参数顺序无关了

输出结果

hello dear.5

12

默认值参数:就是不传参数,会用默认的值,传了参数的就会使用传的参数

def connect_mysql(host, user, password, port=3306): #port=3306为默认参数

pass #pass就类似一个占位符,保证函数完整,没有语法错误

host= input("input host:")

user= input("input user:")

password= input("password")

connect_mysql(host, user, password)#不用再传port的值的,默认就是3306;也可以传一个新的值替代3306

可变长参数:参数的个数不确定,理论上有无限多个,但一般不会超过6或7个

#可变长参数

def get_sum(*num): #求和,参数名前面加*(变量名可以自定义)就可以定义为可变长参数

summ =0for i innum:

summ+=ireturnsummprint(get_sum(1, 2, 3, 4, 5, 6, 7, 8, 9))def print_alpha(*args): #打印字符串

for i inargs:print(i)

print_alpha("a", "b", "c")

输出结果45a

b

c

多个关键字参数转字典

def test(**kwargs): #**两个后面加变量(变量名可以自定义),这样后面传多个值(需要传关键字参数),并且结果为字典

print(kwargs)

test(name="zhangsan", age=18, gender="M")def people(name, *args, age=18, **kwargs):print(name)print(args)print(age)print(kwargs)

people("zhangsan", "man", 25, salary=20000, department="IT")

people("zhangsan", "man", 180, age=25, salary=20000, department="IT")

people("zhangsan", "man", 180, 25, salary=20000, department="IT")

三.函数返回值

函数的功能是单一的,一个函数只完成一个功能

调用函数时,函数执行完成会有一个执行结果,将执行结果返回给调用者,函数使用return关键字

当执行到return时,说明函数执行完成,会退出函数

deftest(a, b):

c= a +breturncprint("haha") #返回值后面的代码不执行,也就是说函数执行到return就结束了

test(1, 2) #再回顾一下,这是函数的调用,执行函数体内的代码,但这样得不到函数返回值

d= test(1, 2)print(d) #这样终于得到函数的返回值了

print(test(1,2)) #不赋值给变量,直接打印也是可以得到函数的返回值

四.变量的作用域

局部变量和全局变量

name = "zhangsan" #全局变量

defchange_name():

name= "lisi" #这个变量只能在函数内生效,也就是局部变量(可以说这个函数就是这个变量的作用域)

gender = "male"change_name()print(name) #结果为zhangsan

print(gender) #这句会报错,因为它是局部变量,在外面调用不了

name = "zhangsan" #全局变量

defchange_name():global name,gender #这句可以把name改为全局变量,但不建议这样用,如果多次调用函数,这样很容易混乱,容易与外部的变量冲突

name = "lisi"gender= "male"

print(name)

change_name()#这句结果为lisi,调用函数内部的print(name)得到的结果

print(name) #这句结果为lisi

print(gender) #可以调用gender变量了,能打印出结果

五.装饰器

定义一个简单的装饰器

'''装饰器:就是把一个函数作为参数,返回一个加强版的函数,实质就是一个返回函数的函数

可用于修改一些函数的功能,但是不能修改原函数'''

#example 1

def add(a, b): #只有求和的功能

print(a+b)def poweradd(func): #poweradd为一个装饰器,返回一个新函数inner,新函数是在add函数的基础上加了新的功能

definner(a, b):print("hello world")

add(a, b)returninner

f=poweradd(add)print(type(f)) #

f(3, 6)

输出结果hello world9

复杂一点的装饰器,使用@符号

defouter(func):definner(name, age):if age <0:

age=0

func(name, age)#执行作为参数传过来的函数

returninner#使用@符号作用于函数,相当于给函数加上装饰器

@outer #相当于 myprint = outer(myprint)

defmyprint(name, age):print("{} is {} years old".format(name, age))#myprint = outer(myprint)

myprint("xiaoming", -12)

输出结果

xiaomingis 0 years old

定义一个通用的装饰器,当传递多个参数时,也可以使用

defouter(func):def inner(*args, **kwargs):#在这里添加新功能修饰传入的函数

print("***********")return func(*args, **kwargs) #如果func函数有返回值则在这里返回

returninner

@outerdefmyprint(name, age, sex):print("{} is {} years old,and is a {}".format(name, age, sex))

myprint("xiaoming", 23, "man")

输出结果***********xiaomingis 23 years old,and is a man

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值