局部变量变成全局_专业解码 | 带你了解Python全局变量与局部变量!

最新

动态

实时

资讯

部门

通知

专业

速递

NEWS

导语

爱学习的的小伙伴们,在学习专业知识的你们,是否有困惑与不解,不要着急,本栏目致力于为同学们指路迷津。

《专业速递》——带你了解大数据的魅力!

一.局部变量与全局变量

1

局部变量

局部变量是指在函数定义内声明的变量,它们与函数外(即便是具有相同的名称)的其他变量没有任何关系,变量名称对于函数来说是局部的,即变量的作用域只在函数的内部。

示例:

def sum(a,b)

      total=a+b #total在这里是局部变量

      print('函数内是局部变量:',total)

      return tatal

#调用sum函数

sum(5,10)

输出的结果如下:

函数内是局部变量:15

2

全局变量

全局变量是在函数外部声明的变量,程序中的任何地方都可以读取它。如果需要在函数内部访问全局变量,一般要用到global关键字。

示例:

def func():

    x = 200

x = 100

func()

print(x)

输出的结果如下:

100

3

两者区别

局部变量:(1)、函数内部定义的变量;(2)、作用域是函数的内部,如果超出使用范围(函数外部),则会报错。

全局变量:(1)、函数外部定义的变量;(2)、作用域是整个程序。

二.案例精析

Q1

name = "Deris"

def sayHello():

       print ("hello "+name + "!"")

def changeName(newName):

       name = newName

#调用函数

sayHello ()

changeName ("Weng")

sayHello()

输出结果:

hello Deris!

hello Deris!

解析:上例中全局变量name的值没有发生改变,原因是python认为changeName中的name是局部变量,所以全部都是Deris。

Q2

name = "Deris"

def sayHello():

       print ("hello "+name + "!")

def changeName(newName):

       global name

       name = newName

#调用函数

sayHello ()

changeName ("Weng")

sayHello()

输出结果:

hello Deris!

hello Weng!

解析:上例中全局变量name的值发生改变,原因是global把changeName中的name变成全局变量。

三.有问必答

b9d3cae0b88c2ab02e0e8e429d88d169.png

墙墙,为什么用def定义的函数里,变量有时有,有时又没有呢?

73c955e706cbed022b6694f8fc846e7e.png

墙墙有话说

先讲讲基础,Python 使用 def 开始函数定义,紧接着是函数名,括号内部为函数的参数,内部为函数的具体功能实现代码。

def  func(a, b):

       c = a+b

       print( 'the c is ', c)

上面我们定义了一个名字为 function 的函数,函数没有接受参数,所以括号内部为空

这时我们在 Python 命令提示符中输入函数调用 function(),有如下:

501436ea60575afbc62dc52dce68d3f4.png

那什么时候定义的函数又有参数呢?

我们在使用的调用函数的时候,想要指定一些变量的值在函数中使用,那么这些变量就是函数的参数,函数调用的时候, 传入即可。

def func(a,b):

      c=a+b

      print('the c is',c)

在这里定义的一个函数,其参数就是两个数值,函数的功能就是把两个参数加起来。运行脚本后,在 Python 提示符内调用函数 func,如果不指定参数 func(),那么将会出错; 若将 a=1, b=2 传入函数,输出“the c is 3”。

四.教你一招

今天的教你一招,我们来关注导入。

通过前面的学习,我们已经掌握了import以及from...import导入。那么他们究竟有啥区别呢?我们来仔细观察下图:

import turtle

from setuptools import *

turtle.setup(650,350,200,200)

turtle.penup()

turtle.fd(-250)

turtle.pendown()

turtle.pensize(25)

turtle.pencolor( "black" )

turtle.seth(-40)

for i in range(4):

     turtle.circle(40,80)

     turtle.circle(-40,80)

turtle.circle(-40,80/2)

turtle.fd(40)

turtle.circle(16,180)

turtle.fd(40 *2/3)

turtle.done()

(1)import输入

from turtle import *

from setuptools import *

setup(650,350,200,200)

penup()

fd(-250)

pendown()

pensize(25)

pencolor( "black")

seth(-40)

for i in range(4):

     circle(40,80)

     circle(-40,80)

circle(-40,80/2)

fd(40)

circle(16,180)

fd(40* 2/3)

done()

(2)from...import

怎么样,第二种方法是不是肉眼可见的简洁,换句话说,可以更多偷懒了。

但是,第二种方法直接用函数名容易造成重名,一旦写长就要时刻注意函数名与变量是否冲突,有风险。那有没有啥方法既可以简洁一点,又可以无脑用呢?

上图!

3d655c9e-c153-eb11-8da9-e4434bdf6706.svg

import turtle as b

from setuptools import *

b.setup(650,350,200,200)

b.penup()

b.fd(-250)

b.pendown()

b.pensize(25)

b.pencolor("black")

b.seth(-40)

for i in range(4):

     b.circle(40,80)

     b.circle(-40,80)

b.circle(-40,80/2)

b.fd(40)

b.circle(16,180)

b.fd(40 * 2/3)

b.done()

我们可以完全可以起一个小名,如图中的b,采用as 定义这个小名,用小名来称呼模块中的函数。如图所示,简短的小名可以使你的代码做到简洁的同时不易重名。这里给出格式:

import  as

.()

大家以后导入的时候可以露一手咯。

信息来源:温职院大数据专业综合部

 print("END")

审核:孙小涵

编辑:柯鹏翔 刘兢

相关动态:

• 资讯 |大数据是如何被采集及应用的

• 资讯 | 大数据在疫情期间对货运运营商的安全至关重要

• 资讯 | 双十一你被大数据杀熟了吗?数据分析揭秘商家的杀熟套路资讯

• 优秀校友002 | 如何从一名学生成为大公司优秀员工——2018届倪成持

• 优秀校友001 | 如何从一名学生成为大公司优秀员工——2020届梁林辉

651920cb8eb31a8e8d88bf8aba6a29c8.png

温州职业技术学院

大数据技术与应用专业学生综合部

我们发布最新的专业动态

我们分享最受关注的实时资讯

让技术成就你的梦想!!

投稿邮箱:1873395014@qq.com

~欢迎大家踊跃投稿~

9049fcf9c58952f49bc5bd0116541e8e.png
当数据存在主次表时,当更新了次表数据后,主表数据在后台有更变时。可利用刷新主表当前行的方法重显主表数据。 /************************************************************ 函数名称: f_refresh_currentrow(adw) 功 能: 刷新DW当前行数据,不可刷新NO update or arguments的DW 参数说明: adw 目标DW 返 回 值: integer 成功返回1,失败返回-1 作 者: sean 创建时间: 2010年8月18日 ************************************************************/ string ls_dataobject string ls_keys[] //key Column Name string ls_dbname[] //key field Name string ls_coltype[] //field style string ls_tablenm //table name string ls_condition //sql Condition long ll_currentrow //Current Row numeric long ll_column //Column count integer i datawindow ldw datastore ldatastore ldw=adw if ldw.rowcount( )=0 then return -1 elseif trim(ldw.describe( "datawindow.table.arguments"))<>'?' then messagebox('','刷新数据窗口当前行失败!,数据窗口需要参数',exclamation!) return -1 else ll_currentrow=ldw.getrow( ) FOR ll_column = 1 TO long(ldw.object.datawindow.column.count)//key names If ldw.Describe("#"+string(ll_column)+".key") ='yes' Then i++ ls_keys[i]=ldw.Describe("#"+string(ll_column)+".name") ls_dbname[i]=ldw.Describe("#"+string(ll_column)+".dbname") ls_coltype[i]=ldw.Describe("#"+string(ll_column)+".coltype") End If NEXT if upperbound(ls_keys[])=0 then messagebox('','刷新数据窗口当前行失败!,没有主键',exclamation!) return -1 else ls_tablenm=left(ls_dbname[1],pos(ls_dbname[1],'.') -1) //table name for i=1 to upperbound(ls_keys[]) if pos('numb,deci,long,',LeftA(ls_coltype[i],4) +',')>0 then ls_condition+="and "+ls_dbname[i]+"="+string(f_getitem(ldw,ll_currentrow,ls_keys[i])) else ls_condition+="and "+ls_dbname[i]+"='"+string(f_getitem(ldw,ll_currentrow,ls_keys[i]))+"'" end if next ls_condition=mid(ls_condition,4) //sql Condition ldatastore=create datastore ldatastore.dataobject=ldw.dataobject ldatastore.settransobject( sqlca) if f_addwhere_retrieve(ldatastore,ls_condition)=1 then if ldatastore.rowcount( )=1 then ldw.object.data[ll_currentrow]=ldatastore.object.data[1] ldw.setitemstatus( ll_currentrow, 0, primary!, NotModified!) //if ldw.getrow( )<>ll_currentrow then ldw.scrolltorow( ll_currentrow) end if else messagebox('','刷新数据窗口当前行失败!,条件语法错误',exclamation!) return -1 end if destroy ldatastore end if end if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值