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之路Day07
基础数据类型补充 str s.capitalize() -- 首字母大写 s.title() -- 每个单词首字母大写 s.swapcase() -- 大小写转换 s.center() -- 居中/填 ...
- [POI2007] OSI-Axes of Symmetry
Description Luogu3454 BZOJ1100 Solution 把边和角顺次放入一个数组里,如果一个点为中心的回文串的半径大于\(n\),那就一定是一个对称轴.跑一遍manacher就 ...
- Nginx之反向代理
所谓,反向代理就是,客户端向A服务器地址发送请求,A服务器接收到客户端请求后又将请求转发给了B服务器,最后又将B服务响应的数据响应给了客户端. 通过配置文件,可以实现Nginx的反向代理. 代码: s ...
- dyt说反话(注意字符串输入)
题目内容: dyt喜欢对lrh说的话说反话,现给出lrh说的k句话,输出dyt所说的反话. 输入格式 第一行是样例个数k(k<10) 接下来k行,每行包含lrh说的一句话(每句话长度不超过50, ...
- Java-类的生命周期浅析
简述:Java虚拟机为Java程序提供运行时环境,其中一项重要的任务就是管理类和对象的生命周期.类的生命周期.类的生命周期从类被加载.连接和初始化开始,到类被卸载结束.当类处于生命周期中时,它的二级制 ...
- telnet不起作用
1.出现 'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件. 原因:因为本机的Telnet客户端默认是关闭的,所以我们要手动打开 解决方案:打开控制面板–>程序–>打开 ...
- HTML的背景
HTML HTML(超文本标记语言),超文本包括:文字.图片.音频.视频.动画等. W3C(万维网联盟)标准包括: 结构化标准语言(HTML.XML) 1.1. HTML(超文本标记语言):用来显示数 ...
- AcWing 791. 高精度加法
https://www.acwing.com/problem/content/793/ #include<bits/stdc++.h> using namespace std; vecto ...
- 【PAT甲级】1113 Integer Set Partition (25分)
题意: 输入一个正整数N(2<=N<=1e5),接着输入N个正整数,将这些数字划分为两个不相交的集合,使得他们的元素个数差绝对值最小且元素和差绝对值最大. AAAAAccepted cod ...
- Web 安全工具篇:Burp Suite 使用指南
真的是一点都不过分,了解详情请继续往下读. Burp Suite 介绍 Burp Suite 是用于攻击 web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程 ...