Python学习(六)—— 函数、全局变量与局部变量
函数
函数的定义
def test(x):
"The function definition"
x += 1
return x
def:定义函数的关键字
test:函数名
():内可定义形参
“”:文档描述,非必要,但添加后可使得函数更易理解
x += 1:泛指代码块或程序处理逻辑,最好不要过多,让函数的功能简洁明了
return :定义返回值
调用运行:可以带参数也可以不带
函数名()
def test(x):
"The function definition"
x += 1
return x
y = test(5)
print(y)
#
def test1():
"The function definition"
x = 5
y = x * 2 + 1
return y
y = test1()
print(y)
#
注意:函数名一旦重名,后写的函数会覆盖先写的函数,因为Python是从上到下读取的。
使用函数的意义
实现特定的功能,避免重复代码
1、代码重用
2、保持一致性,易于维护
3、可扩展性
函数与过程
过程本质是函数,但是没有设定返回值,而在Python中,会自动为过程返回None
def test01():
x = "I like Python"
print(x)
return x
t1 = test01()
print(t1)
"""
I like Python
I like Python
"""
def test02():
x = "I like Python"
print(x)
t2 = test02()
"""
I like Python
None
"""
返回值数:0 => None
返回值数:1 => 返回object
返回值数:>1 =>返回tuple
函数参数
形参:只有在被调用时才分配内存单元,在调用结束后,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
实参:可以是常量、变量、表达式、函数等,无论是何种类型,在进行函数调用时,它们都必须有明确的值,以便将这些值传给形参。因此,应预先用赋值、输入等方法使参数获得确定值。
位置参数和关键字:标准调用:实参和形参位置意义对应;关键字调用:位置无需固定
def test(x,y,z): #x,y,z是形参
h = x + y ** z
return h
t1 = test(1,2,3) #1,2,3是实参,属于位置参数
print(t1)
t2 = test(x = 2, y =2, z = 2) #属于关键字调用
print(t2)
"""
9
6
"""
注意:二者混用时,位置参数一定要在关键字参数的 左边
默认参数
def test(x,type="None"): #type是默认参数
print(x)
print(type) test(5)
test(5,type="Class")
"""
5
None
5
Class
"""
参数组
**字典 *列表
def test(x,*args):
print(x)
print(args)
print(args[0])
test(1,2,3,5)
"""
1
(2, 3, 5)
2
"""
def test(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
test(1,2,3,5,7,9,y=9)
"""
1
(2, 3, 5, 7, 9)
{'y': 9}
"""
全局变量与局部变量
定头写的是全局变量,在整个py文件中都可以调用
局部变量是子程序中定义的变量,只能在子程序中调用
name = "Sister" #全局变量
def test():
name = "Jenny" #局部变量
print("change_name:",name)
test()
#change_name: Jenny
强制修改成全部变量的方法: 用global
name = "Sister"
def test():
global name #将其定义为全局变量
name = "Jenny"
print("change_name:",name)
test()
print(name)
"""
change_name: Jenny
Jenny
"""
注意:
1、如果函数内无global关键字,优先读取局部变量,能读取全局变量,无法对全局变量重新赋值,但对于可变类型,可以对内部元素进行操作
name = "Sister"
def test():
name = "Jenny"
print("I love ", name)
test()
print(name)
"""
I love Jenny
Sister
"""
name1 = ["Allen", "Paul"]
def test1():
name1.append("Jenny")
print("I love ", name1)
test1()
print(name1)
"""
I love ['Allen', 'Paul', 'Jenny']
['Allen', 'Paul', 'Jenny']
"""
2、如果函数中有global关键字,变量本质上就是全局的特定变量,可读取可赋值
3、全局变量名全用大写,局部变量名全用小写
函数的嵌套
def huangwei(): #执行顺序: 1→14→2、3→4→12→5、6→7→10→11→8、9→13
name = "黄伟"
print(name)
def liuyang():
name = "刘洋"
print(name)
def nulige():
name = '沪指花'
print(name)
print(name)
nulige()
liuyang()
print(name) #只调用这个子函数内部的变量
huangwei()
"""
黄伟
刘洋
刘洋
沪指花
黄伟
"""
注意:可以用nonlocal直接指定上一级变量
前向引用 :函数即变量
def top():
print("from top to bottom")
def bottom():
print("from bottom to top")
top()
bottom()
"""
from bottom to top
from top to bottom
"""
def bottom():
print("from bottom to top")
top()
def top():
print("from top to bottom")
bottom()
"""
from bottom to top
from top to bottom
"""
递归
def calc(n):
print(n)
calc(n)
calc(10)
#Wrong
import time
def calc(n):
print(n)
time.sleep(1)
calc(n)
calc(10)
#结果会不停输出10
递归的特性:
1、必须有一个明确的结束条件
满足某个条件 return
def calc(n):
print(n)
if int(n / 2) == 0:
return n
res = calc(int(n / 2))
return res
res = calc(10)
print(res)
"""
10
5
2
1
1
"""
2、递归的效率不高,递归层次过多会导致栈溢出。
作用域
def test01():
print("test")
def test02():
print("test2")
return 1
res = test02()
print(res)
# test2
# 1
def test1():
print("test1")
def test2():
print("test2")
return test1
res = test2()
print(res)
# test2
# <function test1 at 0x00000213CED9A510> 这是test
def test1():
print("test1")
def test2():
print("test2")
return test1
res = test2()
print(res())
# test2
# test1 这是test1()的执行过程
# None 这是因为没有return值所以添加的默认值
函数运行的结果与其定义有关,与其在哪里调用无关
def name1():
name = ""
def name2():
name = ""
def name3():
print(name)
return name3
return name2
z = name1()
print(z)
#<function name1.<locals>.name2 at 0x000001E8FFAFA488>
name2 = name1()
name3 = name2()
name3()
#2
name1()()()
# 2
Python学习(六)—— 函数、全局变量与局部变量的更多相关文章
- python学习8—函数之高阶函数与内置函数
python学习8—函数之高阶函数与内置函数 1. 高阶函数 a. map()函数 对第二个输入的参数进行第一个输入的参数指定的操作.map()函数的返回值是一个迭代器,只可以迭代一次,迭代过后会被释 ...
- python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程
python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...
- Python新手学习基础之函数-全局变量和局部变量
全局变量和局部变量 我们通常把定义在函数外的变量成为全局变量,定义在函数内的变量称为局部变量,顾名思义,全局变量的作用域是整个代码段,局部变量的作用域就只是在它所属的代码段,变量只在它的作用域里有效. ...
- Python学习--05函数
Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.我们已经知道Python提供了许多内建函数,比如print().但我们 ...
- Python之路 day3 全局变量、局部变量
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 全局与局部变量 在子程序中定义的变量称为局部变 ...
- Python学习笔记 — 函数
函数是对程序逻辑进行结构化或过程化的一种编程方法.函数具有两个方面的意义:1)将代码分块,易于管理和阅读:2)最大化代码复用和最小化代码冗余,节省空间,有助于保持一致性. 1. 函数定义 Python ...
- Python学习笔记-函数基础
函数基础 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 为什么使用函数:减少重复代码.使程序变的可扩展使程序变得易维护 1.定义一个函数 #定 ...
- python 学习分享-函数篇
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...
- Day 10:函数全局变量和局部变量及函数嵌套
全局变量:在所有函数之外赋值的变量,是全局变量. 局部变量:在函数内的变量是,局部变量 一个函数被调用时,就创建了一个局部作用域.在这个函数内赋值的所有变量,存在于该局部作用域内.该函数返回时,这个局 ...
- Swift编程语言学习11—— 枚举全局变量、局部变量与类型属性
全局变量和局部变量 计算属性和属性监视器所描写叙述的模式也能够用于全局变量和局部变量,全局变量是在函数.方法.闭包或不论什么类型之外定义的变量,局部变量是在函数.方法或闭包内部定义的变量. 前面章节提 ...
随机推荐
- 面向对象的封装、继承和多态特性_python
一.面向对象的几个特点 面向对象也称为类,拥有下面几个特点 1.封装特性:利用类的__init__(self)构造方法封装对象 构造方法:__init__(self):在生成对象的时候会自动调用 例子 ...
- linq和扩展方法
c#的扩展方法 1.必须是在一个非嵌套.非泛型的静态类中的静态方法 2.至少一个参数,第一个参数附加this,不能有其他修饰符如out.ref 3.第一个参数不能是指针类型 上面例子是自定义的一个扩展 ...
- java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
问题描述 java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based! 红色部分报错 for ( ...
- 中国城市区号脚本-mysql
中国城市区号 300个. SET NAMES utf8mb4; ; DROP TABLE IF EXISTS `citycode`; CREATE TABLE `citycode` ( `codeId ...
- Java-类的生命周期浅析
简述:Java虚拟机为Java程序提供运行时环境,其中一项重要的任务就是管理类和对象的生命周期.类的生命周期.类的生命周期从类被加载.连接和初始化开始,到类被卸载结束.当类处于生命周期中时,它的二级制 ...
- caffe.bin用法
$ ./build/tools/caffe.bin caffe.bin: command line brew usage: caffe <command><aegs> comm ...
- 每天进步一点点------Allegro 布线时显示延迟以及相对延迟信息
PROPAGATION_DELAYPROPAGATION_DELAY这个设定主要用来对Net绝对长度的设定,如要求设定一组Net的长度要在Min Mil到 Max Mil之间的话,就可以用这种设定来完 ...
- python 更换数据源
1.Win+R打开cmd输入%HOMEPATH%打开自己的HOMEPATH路径文件夹 2.在此路径下建立一个文件夹pip, 里边放一个文件pip.ini内容如下: [global] timeout = ...
- SDP协议介绍
一.SDP协议介绍 SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP).会话初始协议(SIP).实时流协议(RTSP).MIME 扩展协 ...
- hdu1874 (spfa 最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 很简单的最短路问题,刚刚学习spfa,其实很简单,思想和一维动态规划差不多,数组d[i]表示起点 ...