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—— 枚举全局变量、局部变量与类型属性
全局变量和局部变量 计算属性和属性监视器所描写叙述的模式也能够用于全局变量和局部变量,全局变量是在函数.方法.闭包或不论什么类型之外定义的变量,局部变量是在函数.方法或闭包内部定义的变量. 前面章节提 ...
随机推荐
- mysql update某个字段替换成某个值
UPDATE xc_admin_vehicle SET brandid= REPLACE(brandid, 19, 54) UPDATE xc_admin_models SET bid= REPLAC ...
- Python爬取ithome的一所有新闻标题评论数及其他一些信息并存入Excel中。
# coding=utf-8 import numpy as np import pandas as pd import sys from selenium import webdriver impo ...
- C++-1019-Number Sequence
题意: 求数字112123123412345123456123456712345678123456789123456789101234567891011123456789101112123456789 ...
- IMM设置静态ip,安装系统
IMM设置静态ip,安装系统 设置ip: System Setting->Integrated Management Module->Network configuration 修改后选择 ...
- numpy特性
numpy特性 待办 可获取最小值最大值或者排序等操作的索引,然后通过索引取得对应值或者对应值的序列 按行按列求和.按行按列求积 方差等等统计函数使用 enter description here e ...
- MyEcplise中编码格式的修改问题
1.如果是在Run Configurations中修改编码格式的话,只能是修改当前java文件的编码格式,把改文件中的代码复制到 另一新建 的java文件中会出现异常,所以就会出现相同的代码在两个不同 ...
- Iris请求方式和数据返回类型
1. Iris起服务 package main import "github.com/kataras/iris" func main() { //1.创建app结构体对象 app ...
- ubuntu 下的ftp详细配置
FTP(文件传输协议)是一个较老且最常用的标准网络协议,用于在两台计算机之间通过网络上传/下载文件.然而, FTP 最初的时候并不安全,因为它仅通过用户凭证(用户名和密码)传输数据,没有进行加密. 警 ...
- 第十六篇 nginx主配置文件参数解释
# 指定拥有运行nginx权限的用户 #user nobody; # 指定开启的进程数,建议设置为CPU核心数 worker_processes ; # 指定全局错误日志级别,包括:debug/inf ...
- DataTable、DataRow、DataColumn用法
转载csdner 发布于2018-08-17 17:03:30 阅读数 4375 收藏 DataSet 表示数据在内存中的缓存. 属性 Tables 获取包含在 DataSet 中的表的集合. ...