52lmLM 发表于 2021-4-29 10:15

自学python第三天:函数(上)

第三章 函数
先看案例:
def hello():
    print('howdy')
    print('howdy!!!')
    print('hello there')
hello()
hello()
hello()
输出:
howdy
howdy!!!
hello there
howdy
howdy!!!
hello there
howdy
howdy!!!
hello there

def就是调用函数,意为创建一个函数,为了消除重复打印出现了此形式
输出的结果是三次hello函数
3.1def语句和参数
def hello(name):
    print('hello,'+name)
hello('leem')
hello('zzzzj')
打印结果:
hello,leem
hello,zzzzj

可以这么理解,def语句就像是变量与值得关系,把你想要的函数名称输入到def后边
然后解释你调用的函数的作用,在输出这个你的函数时就可以不通过priot,直接输出值

3.2返回值与return语句
return语句必须包含:
1、return关键字;
2、函数应该返回的表达式。
返回的表达式是什么?
就是该表达式求值的结果

看个例子
定义了一个函数,根据传入的数字返回不同的字符串。
import random                   #引入随机数库
def dedaodaan(daanshuzi):       #调用函数
    if daanshuzi==1:            #如果随机数==1
      return '数字一'          #返回字符串"数字一"
    elif daanshuzi==2:          #如果随机数==2
      return '数字二'          #返回字符串"数字二"
    elif daanshuzi==3:          #以下同上
      return '数字三'
    elif daanshuzi==4:
      return '数字四'
    elif daanshuzi==5:
      return '数字五'
    elif daanshuzi==6:
      return '数字六'
r=random.randint(1,6)         #r=随机数库.范围函数(1,6)
forture=dedaodaan(r)            #新的赋值fortune=调用的函数(随机数库生成的随机数)
print(forture)                  #输出赋值forture
这就是可以将得到的变量转化成其他格式进行输出
我用了一些拼音用于读写
dedaodaan()函数被调用,并且以r作为一个函数变量
通过这个函数来实现“按数值评级”等类似的操作

3.3,NONE值
none就是没有值得意思,有点类似于while或for语句中隐式的结束一个语句
3.4 关键字参数和print()函数
许多参数是由他们在函数调用中的位置来识别的,比如random.randint(1,10)与random.randint(10,1)不同
但是关键词参数是在函数调用时有他们的关键字识别的。
例如print()有它可选的变元end和sep(ps:变元:书中之前给出了解释,我理解的是变化的元素,类似于变量)
print('hello',end='')
print('world')
输出:
‘hello,world’
如上所示,关键字参数会取消print()函数后边默认的换行符
当然,也可以输入sep,来替换掉默认的分隔字符
3.5调用栈(zhan四声)
当你和朋友聊天,你想说事情A,但你必须先说B做铺垫
一个例子就明白了
def a():
    print('a() starts')
    b()
    c()
    d()
    print('a() end')
def b():
    print('b() satrts')
    c()
    d()
    print('b() end')
def c():
    print('c() starts')
    d()
    print('c() end')
def d():
    print('d() starts')
    print('d() end')
a()

输出:
a() starts
b() satrts
c() starts
d() starts
d() end
c() end
d() starts
d() end
b() end
c() starts
d() starts
d() end
c() end
d() starts
d() end
a() end

可以看到,最后要的是调用a()函数,这个过程需要执行完b()、c()、d()才能输出到a()函数的最后一步。这就是调用栈。
3.6局部和全局作用域
这一章节在书中精炼的表达了局部和全局作用域的作用,被调用的变元和变量必然属于局部或全局中的一个。
作用域重点:
全局作用域中的代码不能使用任何局部变量
局部作用域中的代码不能访问任何全局变量
一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量
在不同的作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个名字为a的局部变量同时可以有一个名字为a的全局变量
具体的原理我也没太搞清楚,但是这是一个概念性的东西,以后遇到了详细问题在搜索解答出现该词条的时候可以看懂

3.6.1局部变量不能在全局作用域中使用
def spam():    egg=12345spam()print(egg)            
当运行这个程序的时候,是报错的,因为egg是在局部变量,而我要求输出的是全局作用域的变量,所以egg在全局作用域中根本没有被赋值。
3.6.2局部作用域不能使用其他局部作用域内的变量
def spam():    egg=12345    bacon()    print(egg)def bacon():    ham=1011    egg=0spam()输出:12345在局部作用域bacon()中,egg被赋值为0,但最后依然输出了第一个作用域中的12345,这是bacon中的两个赋值是直接被销毁的,因为我在spam中已经对egg进行赋值了,下边的赋值就是不生效的状态。3.6.3全局变量可以在局部作用域中读取def spam():    print(egg)egg=100spam()print(egg)
            








寒冰流火 发表于 2021-4-30 06:50

构造函数这简单的例子看得懂稍复杂的就不行我自己还得下功夫   谢谢楼主提供经验

庸世俗人罢勒 发表于 2021-4-29 11:21

PY这个教程,比较好上手的可以看B站黑马的这个,https://www.bilibili.com/video/BV1ex411x7Em 。学习这完意儿说到底就是个持之以恒了

xmxueyuan 发表于 2021-4-29 10:35

感谢分享 ,复习一次

ecorange 发表于 2021-4-29 10:46

總是覺得自學都很厲害

skiss 发表于 2021-4-29 10:46

哇,自学需要很大的毅力。楼主加油,坚持!

whg118 发表于 2021-4-29 10:55

欢迎分享PY基础知识,学PY从0开始,还要找一个适合自己的方法。

UNKNNOW 发表于 2021-4-29 11:04

楼主厉害啊 我现在也在自学java打算也做一个 自学java的系列帖子

fzh217 发表于 2021-4-29 11:20

感谢分享

家定不举棋 发表于 2021-4-29 11:33

我也刚开始学python,跟着廖雪峰老师和菜鸟教程走的

与记忆相关 发表于 2021-4-29 11:39


欢迎分享PY基础知识
页: [1] 2
查看完整版本: 自学python第三天:函数(上)