yandyand

导航

python之函数

# python 3.7.5 
# Time : 2019/4/11

#函数:

#先定义一个函数
'''
def 函数名(形参1,形参2,形参3....)
功能
return 表达式

def是定义函数的关键字,当然函数名要遵循变量的命名规则
()它叫做形参,当定义函数的时候,括号内的的参数就叫做
形参,每个形参用都和隔开,形参的值就是从函数的调用者
哪里来获得,也可以把它当成一个变量,来调用里面的值

功能:函数的作用,可以干什么

return:返回值,这个可以有,也可以没有,如果没有
定义return他默认会返回None。

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

函数执行:函数名() [使用函数名,然后+参数]


函数的作用:1.方便代码的复用性
2.让我们在编写代码是更加的简洁

'''

#第一个函数
#首先一个函数名
#然后函数的作用
#之后执行函数

# def name():
# print("my name is yy")
#
# name()

#当然也可以执行多次
# def yy():
# print("今天是个好日子!!")
#
# yy()
# yy()
# yy()


#设置传参,传递一个参数
# def name(user):
# print("my name is %s"%(user))
#
# name("tom")

# def day(day):
# print("today is windy today %s"%(day))
#
# day("就是现在")


# def name(名字):
# print("我的名字叫做%s"%(名字))
#
# name("杨洋")

# def yy():
# print("天儿不错啊")
# yy()

#设置两个传参,并且调用两个
# def yang(name,user):
# print("我姓:%s名:%s"%(name,user))
# yang("杨","洋")
#也可以指定传参的值,
# yang(name="洋",user="杨")

#这里要说一下,带默认值的参数必须放在最后面,无论在什么情况下只要是带默认值的形参必须放在后面
#默认形参
# def name(mingzi,nianling="20"):
# print("我叫%s,今年%s岁了!"%(mingzi,nianling))
#
# name("杨洋")

#但是如果你把默认的形参放在前面
#直接报错千万记住默认的形参不能放在前面
# def name(nianling="20",mingzi):
# print("我叫%s,今年%s岁了!"%(nianling,mingzi))
# name("杨洋")

#return返回值
#这里来解释一下这个函数的执行顺序:
'''
1.首先我调用了这个函数
2.函数有两个形参
3.full中 + + 的意思是:两个字符串相加得一个字符串的整合
4.” “的意思是我在这个字符串中空一个格
5.return返回的值是我是一个返回的值
6.当我去调用这个函数的时候为什么只会返回return的值呢?
7.首先我执行这个函数的时候先执行第一个
8.第一行执行,然后他会检测下面有没有调用这个函数的变量
9.发现res调用了变量,所以直接执行res
10.这时def会变成(name="人生苦短",lost="我学python!")
11.然后继续执行发现full将两个形参相加得到”人生苦短 我学python!“
12.继续执行发现了return,也就是返回值,返回值传递给res
13.res得到返回值,也就是”我是一个返回值“
14.打印print发现打印出了返回值
'''
# def tell(name,lost):
# full=name + " " + lost
# print(full)
# return "我是一个返回的值"
# res = tell("人生苦短","我学python!")
# print(res)

# def day(yes,next1):
# today=yes + " " + next1
# print(today)
# return "今天我的返回值"
#
# res = day(yes="舒服",next1="很开心")
# print(res)

'''
变量的分类:
全局变量:定格写的变量叫做全局变量,说白了他可以在这个程序中随意的调用
局部变量:在代码组中定义的变量,局部变量在正常的情况下只能在局部变量中使用

'''

#例子
#此时会报错,因为b变量是局部变量,并不能变量
# a = "全局变量"
#
# def name():
# b="局部变量"
# print(a)
# print(b)
#
# name()
# print(a)
# print(b)

#当然也可以调用局部变量
#global #这个可以是局部变量变为全局变量

# a = "全局变量"
# def name():
# global b
# b = "局部变量"
# print(a)
# print(b)
# name()
# print(a)
# print(b)

# a = "我是一个全局变量"
# def yy():
# global b
# b = "我是一个指定的局部变量"
# print(a)
# print(b)
# yy()
# print(a)
# print(b)
#

# def tell(name,user,py):
# print("我叫%s我是%s"%(name,user))
# return "我明天将要去学习%s"%py
#
# res = tell("杨洋","男性","python")
# print(res)

# def name(yy1,yy2,yy3="帅"):
# print("%s你%s很%s"%(yy1,yy2,yy3))
# return "代码执行完毕,%s"%yy3
#
# num = name(yy1="帅",yy2="杨洋")
# print(num)

# def a(20):
# def b(b..):
# return 20+b
# return inner
# res = 10

#函数的闭包
#闭包:内部函数调用外部函数得变量,(非全局变量)则称之为内部函数为闭包
#调用一个函数,返回一个新的函数回来,返回的函数就叫闭包
#这个主要得自己理解

# def outher(num1):
#先说一下代码是如何执行的
# def inner(num2):
# return num1 + num2
# return inner #2.return也就是返回的值为 inner 这个函数
# res = outher(20)
#1.res = outher20在这里可以理解为函数outher的值是20
#3.ok!前面两个都理解,就好说了当这个函数outher执行到内部函数的时候
#返回的值是return也就是inner,那么由此可以知道res = inner这个函数
#4.那么接下来就好看了,下面来说result给res的赋值就是=inner(10)
#5.再往下计算里面的函数
#6.也就是num1=20,num2=10,执行里面的return返回值就是20+10=30
#7.ok由此可以得出的结果是return=30
#结论有点绕
#就是说当一个函数执行里面的函数,然后外部指定局部变量名的时候,这种情况就叫做闭包
# result = res (10)
# print(result)

# def demo():
# a = 1
# def demo1():
# print(a)
# return demo1
# var = demo()
# print(var())
# def outer():
# a = [1]
# def inner():
# a[0] = a[0] + 1
# return a[0]
# return inner
# res = outer()
# result = res()
# print(result)
#首先调用outher这个函数
#在函数中a的值是一个列表,它的第一个元素是1
#然后往下执行inner这个函数
#在inner这个函数中寻找a[]这个变量发现没有所有引用上面的变量#注意这里就开始闭包了
#所以找a不到a调用上面的a的第一个元素,也就是1,那么1+1就等于2
#然后return返回a的第1格元素也就是1
#之后在返回inner这个函数
#所以res就等于inner
#所以1+1=2
#打印出result的值就是2



# def outer(num1):
# def inner(num2):
# return num1 + num2
# return inner
# res = outer(20)
# result = res(10)
# print(result)

posted on 2020-06-06 16:01  yandyand  阅读(158)  评论(0)    收藏  举报