python函数

Python函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,

比如print(),但你也可以自己创建函数,这被叫做用户自定义函数

return [表达式] 结束函数,返回一个值给调用方。不带表达式的return相当于返回 None

经常使用的代码可以定义函数,方便执行

定义函数是不会执行的

def 函数名():

    函数代码

def print_hello():

    print("人生苦短,我用python")

print_hello() #调用函数

带参数的函数

def test1(r):  #r形参,代表一个变量

    s=3.14*(r**2)  #print("圆的面积为:%s"%s)

test1(11.8) #真正的参数

多参数函数

def 函数名(参数1,参数2...):可以随便起,形参,不用在前面定义,也不会和之前的变量冲突

a=1

def test(a,b):  #形参,局部变量

    c=a+b

    print("%s加上%s的和为%s"%(a,b,c))

test(a,20)  #实参,在调用函数的时候传给函数的参数,实参可以传全局变量

带有返回值的函数(执行函数返回的结果就是返回值)

def test(a,b):

    c=a+b

    return c #返回值为c,即a+b的值,没有返回值s的结果为None

    #return被执行之后,不管return后面还有什么代码都不会执行

    print("我是帅哥")#此代码不会被执行

s=test(10,20)

print(s)

函数返回多个值

def test():

    a=1

    b=2

    return a,b   #[a,b] 这样也可以让返回值变成列表 #默认返回多少值就要用多少个值赋,用一个值赋值默认是元组

x=test() #或x,y=test()

print(x)

判断输入的不是数值不执行

def test(a,b):

    if isinstance(a,(int,float)) and isinstance(b,(int,float)):

    #判断a和b是int或者是float就执行下面的代码

        print("传入成功")

        c=a+b

    else:

        print("传入失败")

    return c

num1=100

num2=200

s=test(num1,num2)

print(s)

2.1版本:判断输入的不是数值不执行

def test(a,b):

    if not isinstance(a,(int,float)):

        print("传入失败,%s不是一个数字类型"%a)

        return#如果a不是数值,函数后面的代码没有必有执行

    elif not isinstance(b,(int,float)):

        print("传入失败,%s不是一个数字类型"%b)

        return#如果b不是数值,函数后面的代码没有必有执行

    else:

        print("传入成功")

        c=a+b

        return c

num1=200

num2=200

s=test(num1,num2)

print(s)

求3个数的平均值

def avg_3num(a,b,c):

    if is_number(a) and is_number(b) and is_number(c):

    #调用3此下面定义的函数,判断a,b,c的值为不为数值类型

        return (a+b+c)/3

    else:

        print("没法计算平均值")

def is_number(a):          #判断a的值是不是int或float类型

    if not isinstance(a,(int,float)):

        print("传入的实参是:%s,传入的不是一个数字"%a)

        return False        #不是int和float就返回False

    else:

        return True        #是就为True

avg=avg_3num(100,225,233) 

print(avg)



局部变量只能在该函数中使用,全局变量能在所有环境使用

count = 5 全局变量

def myfun():

    count = 10 局部变量

    print (count)

myfun() 结果是10

print(count) 结果是5



def fun():

    print("fun在调用")

    def fun1():

        print("fun1在调用")

    fun1() #fun里调用fun1

fun()  #调用fun函数


在函数里面修改全局变量

1.如果全局变量是可变类型,可以在函数里面任意修改(值,引用)

2.如果全局变量是不可变类型,在函数里面不能修改值,也不能修改引用,除非加上global

3.在函数内可以修改列表和字典全局变量,字符串和数值要加global,只有可变类型可以修改

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了

def outer():

    num = 10

    def inner():

        nonlocal num  # nonlocal关键字声明

        num = 100

        print(num)

    inner()

    print(num)

outer()

函数默认参数

def test(x,y,z=10):    #默认参数必须在最后

    print(x,y,z)

    return x+y+z

print("三个数的和是%d"%test(5,8))#缺省参数可以不传参,也可以随便传个参数,替代默认值


不定长参数

def test(x,y,*args,): #不定长参数可以传多个参数,元组方式显示

    print(x,y)

    print(args)

test(1,2,3,4,5,6,7)

1 2

(3, 4, 5, 6, 7) #默认是元组

def test1(x,*args,**kwargs):

    print(x)

    print(args)

    print(kwargs)

test1(1,2,3,4,num1=5,num2=6)

结果1,(2,3,4),{'num2': 6, 'num1': 5}


拆包

nums=[3,4]

num2={"num1":5,num2:6}

test(2,*nums,**num2) 


递归函数(在函数内部调用函数本身的函数)

打印阶乘

1.在函数的内部调用自己本身

2.递归函数本质是一个方法的循环调用,注意,有可能会出现死循环

3.一定要定义函数的边界(什么时候退出循环)

def test(n):

    if n == 1:

        return 1

    return  n * test(n-1)

print(test(7))


匿名函数(没有名字的函数),不需要定义def

python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,

后者的目的是调用小函数时不占用栈内存从而增加运行效率。

sum = lambda arg1, arg2: arg1 + arg2 sum(10,20)  结果30

func = lambda x,y:x+y #需要赋值给一个变量

print(func(11,22))

#!/usr/sbin/python3

def test(a,b,func):

    result=func(a,b)

    return result

print(test(22,33,lambda x,y:x+y))

stus=[{'name':'zs','age':'22'},{'name':'laowang','age':'19'},{'name':'aini','age':18}]

stus.sort(key=lambda x:x['name']) #按照name的values进行比较

print(stus)

结果如下: #按列表的某一个元素进行比较

[{'name': 'aini', 'age': 18}, {'name': 'laowang', 'age': '19'}, {'name': 'zs', 'age': '22'}]

#!/usr/sbin/python3

def test(a,b,func):

    result=func(a,b)

    return result

func_new=input("请输入你的操作:")  #可以输入:lambda x,y:x+y

func_new=eval(func_new) #把字符串换成一个表达式,可以执行

print(test(22,33,func_new))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354