函数详解(三)

函数的返回值

函数可以返回0个或多个结果

return保留字用来传递返回值(不是确定必须要有的保留字,后面可以加0,也可以不使用return)

函数可以有返回值,也可以没有,可以有return,也可以没有。

return可以传递0个返回值,也可以传递任意多个返回值。

示例代码如下:

def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return n//m,n,m,s
print(fact(10,5))

运行界面如图:

当输出多个返回值的时候,值以元组的形式进行输出,以逗号进行分割。

当然我们也可以使用几个变量,将他们之间用逗号进行分割,并且获得返回值,这样子达到的输出效果,这些输出值都进行分割了。

示例代码如下:

def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return n//m,n,m,s
a,b,c,d=fact(10,5)
print(a,b,c,d)

运行界面如下:

与此同时,介绍两个return返回值的多个相关示例如下:

示例一:取代旧字符

代码示例如下:

def old(word):
    if "山寨" in word:
     words=word.replace('山寨','**')
     return words
print(old("这是山寨版的"))

运行界面如下:

示例二:获取游戏新位置

示例代码如下:

def old(x,y,step):
    nx=x+step
    ny=y+step
    return nx,ny
print(old(100,100,60))

运行界面如下:

 局部变量和全局变量:

有一段程序中间有一个函数定义,其中使用的变量叫全局变量,而在函数定义的函数体中使用的变量叫局部变量。

区别在于局部是函数内部使用的变量,而函数外部整个程序使用的变量叫全局变量。

函数外部无法访问局部变量,同时,不同函数内部可以包含同名的局部变量,这些局部变量的关系类似于不同目录下同名文件的关系,它们互相独立,互不影响。

(1)代码示例如下:

def test_one():
    number=10
    print(number)
test_one()
print(number)

运行界面如下: 

故函数外部无法访问局部变量。

(2)代码示例如下:

def test_one():
    number=10
    print(number)
def test_two():
    number=20
    print(number)
test_one()
test_two()

运行界面如下:

故不同函数内部可以包含同名的局部变量

全局变量可以在程序的任意位置被访问。同时全局变量在函数内部只能被访问,而无法直接修改。

(3)代码示例如下:

number=10
def test_one():
    print(number)
    number+=1    #此为局部变量,但是局部变量并没有声明number,故有错误。
test_one()
print(number)

运行界面如下:

<语句块1>

def <函数名>(<参数>):

<函数体>

return <返回值>

<语句块2>

即如上所示,整个程序而言使用的即为全局变量,在函数内部出现的变量即为局部变量。

示例代码如下:

n,s=10,100      #n,s为全局变量
def fact(n):      #fact()函数中的n和s为局部变量
    s=1          #fact函数中的s=1为局部变量,与s=100的全局变量不同。
    for i in range(1,n+1):
        s*=i
    return s   #  此时返回的s为局部变量,即所求的阶乘。s=362800
print(fact(n),s)  #此时的n,s为全局变量,用当前的全局变量n来调用函数,同时打印出当前全局变量s的值

运行界面如图所示:

 局部变量和全局变量有两个规则。

规则1:局部变量和全局变量是不同变量

局部变量是函数内部的占位符,与全局变量可能重名但不同。

函数运算结束后,局部变量被释放(这个变量将不再存在,只是用于函数内部运算的)

可以使用global保留字在函数内部使用全局变量

global保留字用来在函数内部中 声明这个变量,它是全局变量而不是局部变量。

代码示例如下:

n,s=10,100      #n,s为全局变量
def fact(n):     
    global s         #fact()中使用global保留字,表示此时的s为全局变量,即为100,且在函数体内的s都为全局变量
    for i in range(1,n+1):
        s*=i
    return s   #  此时返回的s为全局变量,即所求的阶乘。
print(fact(n),s)  #此时的n,s为全局变量,用当前的全局变量n来调用函数,同时打印出当前全局变量s的值,而当前的全局变量被函数修改。

运行界面如下:

 规则2:局部变量为组合数据类型的时候,且未在函数内部创建,等同于全局变量。

在外部创建代码示例如下:

ls=['F','f']   #通过使用[]真实创建了一个全局变量列表ls
def func(a):
    ls.append(a)  #此处ls是列表类型,未真实创建,则等同于全局变量
    return
func("C")    #调用这段函数,全局变量ls被修改。
print(ls)

运行界面如下: 

同时在内部进行创建,代码示例如下:

ls=['F','f']   #通过使用[]真实创建了一个全局变量列表ls
def func(a):
    ls=[ ]       #此处ls是列表类型,真实创建,则ls是局部变量
    ls.append(a) #有真实创建的局部变量,所以此处ls为局部变量
    return
func("C")    #调用这段函数,局部变量ls被修改。
print(ls)

运行界面如下:

通过以上可知,当组合数据类型没有在函数体内真实创建时为全局变量,真实创建后为局部变量。

在以上代码编写过程中,我们发现一个函数为append。

append()函数,用于在列表末尾添加新的对象

语法格式如下:

list.append(o)

参数

list:列表对象

o:添加到列表末尾的对象

append()函数无返回值,但是会修改原本的列表。

示例代码如下:‘

ls=['r','g','f',]
def func(a):
    ls.append(a)
func('y')
print(ls)

运行界面如下: 

组合数据类型在python中是通过指针来体现的

如果函数中如果没有真实创建组合数据类型,它使用的变量是使用的指针(指的是外部的全局变量)修改指针对应的内容就修改了全局变量。

总结如下:

基本数据类型无论是否重名,局部变量与全局变量不同。

可以通过global保留字在函数内部声明全局变量

组合数据类型(列表与字典)如果局部变量未真实创建,则是全局变量。

程序中搜索变量时所遵循的原则为依次按照先搜索局部作用域(局部变量的形参生效的区域)、嵌套作用域(嵌套定义中的外层函数声明的变量生效的区域)、全局作用域(全局变量生效的区域)、内置作用域(内置模块声明的变量生效的区域)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SmoothStep函数是一个用于生成平滑过渡的函数。它接受个参数:t1,t2和x。首先,x的值会被标准化到0到1的范围内,公式为(x-t1)/(t2-t1)。然后,这个标准化后的值会通过一个次多项式函数进行平滑处理,公式为x*x*(3-2*x)。最后,函数返回处理后的值。 SmoothStep函数的作用是在给定的范围内生成平滑的过渡效果。当x的值在t1和t2之间时,函数返回值会在0到1之间变化。当x小于t1时,返回值为0;当x大于t2时,返回值为1。在t1和t2之间的过渡区域内,返回值会平滑地从0过渡到1。 SmoothStep函数可以用于各种应用,比如在图形渲染中实现平滑的颜色过渡效果,或者在动画中实现平滑的运动效果。 引用\[1\]中给出了SmoothStep函数的具体实现代码,而引用\[2\]中提到了一个类似于SmoothStep函数的公式,它也可以用于生成平滑过渡效果。这个公式是saturate((x-0.5)/max(0.001,a)+0.5),它将x的值在某一范围内进行缩放,并将结果限定在0到1之间。 总结来说,SmoothStep函数是一个用于生成平滑过渡效果的函数,它可以通过调整参数t1和t2来控制过渡的范围,而函数返回值会在0到1之间平滑地变化。 #### 引用[.reference_title] - *1* [【Shader Graph】SmoothStep节点详解及其应用](https://blog.csdn.net/weixin_61427881/article/details/127839417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Unity Shader中常用函数及其几何意义--持续更新ing](https://blog.csdn.net/u010778229/article/details/107285163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值