Python 第六天

函数,全局变量与局部变量

在编程语言中,由于常常会编写相当长的一段代码或者说海量的代码,在编写完成后,是否如果想要修改某一处,但是编写过程中没有做区分的话就很难找到想要修改的地方,这时候函数的作用就体现出来了,函数在编程中起的作用是将程序的执行语句模块化。
Python中定义函数的方法:

def add(): #Python中定义函数的前缀必须有def(匿名函数除外)
	print("Hello Word") #函数的语句,函数体
add() #调用函数,调用时不需要加def,程序中的函数在不进行调用的情况下是不会起作用的,需要使用时则用函数名+()的形式进行调用
add()#函数可以重复调用,所以这里再写一个调用也没问题,不过需要注意的是,调用语句必须在被调用函数的后面才能起作用(main情况除外)
函数与传参
def add(a,b): #在括号内定义了两个变量a,b,此时两个变量都没有赋值
	c=a+b            #将a,b相加的值赋值给c
	print(c)			  #打印c的值
add(2,3)            #括号内填写了2和3,调用时按照顺序分别传给a,b,即2给了a,3给了b
add(5,6)			 #再次调用,上次的调用时给a,b传入的值并不会影响本次值的传入(也有例外情况,不过暂时不讨论)
传参时的一些情况
情况以
def wan(a,b):
    print(id(a)) #打印a的内存地址,可以发现地址和x一样
    a=10         #对a重新赋值
    print(id(a)) #打印a的内存地址,可以发现,不一样了
    c=a+b
    print(a,b,c)
    print(x,y)

x=1
print(id(x)) #打印x的内存地址
y=2

wan(x,y)
情况二
a=[1,2,3]
b=[4,5]

def jia01(x,y):
    print(id(x))
    x.append(10)
    y=[0,5,8]
    print(y)


jia01(a,b)
print(id(a))
print(a)


def asd(a=[]):#可变参数不建议作为默认参数使用,因为容易造成歧义
    a.append('h') #个人理解来讲,其实关键问题在关键字append这里,append的作用是像指定的内存地址中添加内容,所以在这个前提下,两次函数调用都是指向同样的内存地址,而a列表的内存在第一次调用时就添加了内容,并且没有清空,所以当第二次调用时,实质是在第一次的基础上追加信息,从而导致了两次调用后出现的值自然就不一样了
    print(a)

asd()
asd()
情况三
a=3 #全局变量可以和局部变量重名
def hjk():
    # print(a) #给z=5加上注释符,然后这里的注释扶如果去掉,那么显示的结果会是3
    # a+=5
    a=5
    print("wer ",a)

hjk()
print(a)
#函数hjk和函数外都有变量a,然后函数内的变量无法被函数外调用,这种只在部分区域内能使用的变量被称为局部变量,而函数外的变量却可以在函数内被调用,这种整个程序都可被使用的变量被称为全局变量
情况四
a=[1,2,3,4]

def tgh():
    a.append(10)

tgh()
print(a)

def tgh1():
    a=[2,3,45] #在函数内,有等号则是重新开辟空间

tgh1()
print(a)
global

global关键字用来在函数或其他局部作用域中使用全局变量。但是如果不修改全局变量也可以不使用global关键字。

def hs1():
    a=3
    def hs2(x,y):
        z=x+y
        return z
    b=4
    c=hs2(a,b)
    return c
print(hs1())

def cs1():
    global a1
    a1=19

cs1()
print(a1)

b1=3
def cs2():
    global b1
    b1+=4

print(b1)
cs2()
print(b1)

nonlocal

nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。

b=3
def hanshu():
    a=1
    b=12
    def han():
        nonlocal a
        nonlocal b
        a='d'
        b='c'
    print("输出a",a)
    print(b)
    han()
    print("输出b",b)

hanshu()
print(b)

LEGB
Local 函数或本地的变量和方法名
Enclosed 嵌套函数中,相对于内层函数而言,外层函数的变量和方法名
Global 全局变量和方法名
Built-in Python默认以及内置的变量和方法名

a='allera'
b='allerb'
c='allerc'

def outer():
    a='outera'
    b='outerb'
    def inner():
        a='inner'
        print('函数inner输出的a的值',a)
        print('函数inner输出的b的值',b)
        print('函数inner输出的c的值',c)
        print(max)
    inner()

outer()

匿名函数

def xx():
    ln=[]
    for i in range(4):
        ln.append(lambda x:x*i)#这里是个匿名函数
    return ln

a=xx()
print(a[0](2))
print(a[1](2))
print(a[2](2))
print(a[3](2))

以上代码等于:

def xx():
    ln=[]
    def x1(x):
        return x*i
    for i in range(4):
        ln.append(x1)
    print(ln)
    return ln

a=xx()

print(a[0](2))
print(a[1](2))
print(a[2](2))
print(a[3](2))

作业

# 判断一个数是否是回文数。例如:输入:121,输出也是121,像这样的数就是回文数
# a=input("请输入数字")
#
# if a==a[::-1]:
#     print("回文数")
# else:
#     print("不是")

# 2.查找字符串中每个字符最后出现的位置。
text = """
东边来了个喇嘛,西边来了个哑巴,喇嘛手里拎着五斤挞嘛,哑巴腰里别着个喇叭,
别着喇叭的要用喇叭换手里拎着挞嘛的哑巴的挞嘛,
拎着挞嘛的哑巴不愿意用挞嘛换手里拎着喇叭的喇嘛的喇叭。
拎着喇叭的喇嘛用喇叭打了拎着挞嘛的哑巴,
拎着挞嘛的哑巴也用挞嘛打了拎着喇叭的喇嘛。
"""
b=set()
b.update(text)
for i in b:
    print(i,"最后一次出现在第",text.rfind(i)+1,"位")

# 3.‘2018-11-12’去掉‘-’输出
a='2018-11-12'
b=a.split('-')
print(b)

# 4.统计数字,字母,下划线个数
a='123edfyAhjnol'
num=0
leter=0
smart=0
byt=0
for i in a:
    if i.isdigit()==True:
        num+=1
    elif i.isupper()==True:
        leter+=1
    elif i.islower()==True:
        smart+=1
    else:
        byt+=1
print(num,leter,smart,byt)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值