一:python函数

是组织好的,可重复使用的,用来实现单一,或相关联功能的代码块。以前使用过的一些Python提供的内建函数,如print()、max(4,18)、min(100,50)。当然我们自己创建的函数,叫做自定义函数。

    ①、代码要遵循的原则:高内聚,低耦合

模块内部之间的联系,应该非常紧密的

模块与模块之间的联系,应该尽量少

②、优点:

函数能提高应用的模块性,和代码的重复利用率。

    ③、定义函数的场合:

凡是我们需要描述某个功能的时候,都将它定义为函数

    ④、函数定义规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。  函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不写return,相当于返回 None。

    ⑤、定义函数格式:

def 函数名(参数列表):

函数体

函数调用:

函数不调用就不会执行,调用函数通过函数名完成

⑥、建议:

函数的第一行语句,可以选择性地使用文档字符串,用于存放函数说明,函数定义时,一个函数的功能要单一。

1、简单定义函数

#定义函数
def hello() :
print("Hello Python ...!")
#调用函数 函数不调用,不执行
hello()

运行结果:

Hello Python ...!

 2、简单实现业务

#定义函数,实现打印5行5列的*号
def print_tr() :
for i in range(5):
for j in range(5):
print("* ",end="")
print()
#调用
print_tr()

运行结果:

* * * * *
* * * * *
* * * * *
* * * * *
* * * * *

 3、在函数中,定义参数

函数是否需要未知数参与,需要可以用参数定义出来。

#计算两个数之和
#2个数是未知数,未知数相当于python的参数
def add(a,b):
#print('{0}+{1}={2}'.format(a,b,a+b))
print('%s+%s=%s'%(a,b,a+b))
#调用
add(7,8)

运行结果: 

7+8=15

4、在函数中,指定返回值

return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回None。

#调addCopy01()函数,返回两个数之和的值
def addCopy01(a,b):
return a+b
#调用
result = addCopy01(100,200)
print(result)
print('-------------------------------')
#return 直接结束函数,'函数结束'提示,没有输出。
def test_method():
for i in range(10):
print(i)
return # return结束函数 break结束循环
print('函数结束')
#调用
test_method()

运行结果:

300
-------------------------------
0

5、参数类型

①、必需参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用函数,你必须传入参数,不然会出现语法错误:

#必须传入,2个参数
def addCopy01(a,b):
return a+b
#调用
addCopy01(100,200)

 ②、关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致:

#关键字参数:
def printinfo(name, age):
print("名字: ", name)
print("年龄: ", age)
#调用
printinfo(age=50, name="张三")

 运行结果:

名字:  张三
年龄: 50

③、默认参数

调用函数时,如果没有传递参数,则会使用默认参数。

#默认参数:
def printinfo(name, age=35):
print("名字: ", name)
print("年龄: ", age)
#调用
printinfo(name="张三",age=50)
print("------------------------")
printinfo(name="张三")

运行结果:  

名字:  张三
年龄: 50
------------------------
名字: 张三
年龄: 35

④、不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。

加了星号(*)的参数名,会存放所有未命名的变量参数。如果在函数调用时,没有指定参数,它就是一个空元组。

#查看不定长参数,传入的值
def add2(a,*b):
print(a,end="")
print(b)
#调用
add2(1) #1()
add2(1,2) #1(2,)
add2(1,2,3) #1(2, 3)
print("------------------------")
#求和 [不限制几个参数]
def add3(a,*b):
sum = 0
for i in b:
sum += i
return a+sum
#调用
print(add3(1))
print(add3(1,2))
print(add3(1,2,3))

运行结果:

1()
1(2,)
1(2, 3)
------------------------
1
3
6

python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句来定义一个函数。

①、lambda 函数的语法只包含一个语句

②、命名空间:python中存放变量名的空间或字典!

注意:

①、lambda 只是一个表达式,函数体比 def 简单很多。

②、 lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

③、 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

sum = lambda a,b:a+b
print(sum(10,20))

运行结果:

30

7、参数传递问题

 ①、对象是真实存在的数据,类型属于对象,变量是没有类型的。

number = [1,2,3,4,5,6]
info = "Hello"

解释:[1,2,3,4,5,6] 是 List 类型,“Hello” 是 String 类型,而变量number与info是没有类型,它仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象

②、可更改与不可更改对象

python 中一切都是对象,传递参数分为传不可变对象和传可变对象

python 中,string字符串,tuple元组,和numbers整数,是不可更改的对象,而list列表,dict字典等则是可以修改的对象。

使用函数的时候,如果传入参数是不可变的,那么参数里面对数据做的任何操作,都不会对函数外面的数据带来影响。不可变类型:如fun(a),传递的只是a 的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的新对象,不会影响 a 本身。

# 不可变类型参数传递
num = 1
def change(num):
num = 3 #没有对num操作,重新定义了一个num
print(num)
change(num)
print(num) #不会影响函数外,num本身的值
print('----------------------')
# 返回值例外
num2 = 1
def change(num2):
print(num2) # 1
num2 = 3
return num2
num_result = change(num2)
print(num_result) #返回值例外 3
print(num2) #函数内改变,不影响函数外的不可变对象 1

运行结果:

3
1
----------------------
1
3
1

可变对象类型:如 fun(la),则是将 la 真正的传过去,在函数内部,修改后,fun外部的la也会受影响

list_num = [1,2]
def change(list_num):
list_num.append(3)
print(list_num) #[1, 2, 3]
change(list_num)
print(list_num) #[1, 2, 3]

运行结果:

[1, 2, 3]
[1, 2, 3]

二:变量作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。

Python的作 用域一共有4种,从小到大分别是:

L (Local) 局部作用域

局部作用域,即函数中定义的变量

局部变量(只能在函数内部使用)

E (Enclosing) 闭包函数外的函数中

嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

G (Global) 全局作用域

全局变量,就是模块(python文件)级别定义的变量;

定义在函数外的变量

B (Built-in) 内建作用域

系统固定模块里面的变量,比如int, bytearray等。

总结:以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找,内建中找不到程序报错

name = str('张三') #python内置的作用域 ->内建作用域
y = 2 #全局 ->全局作用域
def outer():
a = 3 #闭包 -> 闭包
def inner():
b=2 #局部 ->局部作用域
print(a)
inner()
#print(b) #报错
outer()
#print(a) #报错

运行结果:

3

1、作用域一

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域(有作用域的限制);其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。

# 实例中 msg 变量定义在 if 语句块中,但外部还是可以访问的。
if True:
msg = "ok"
print(msg)
# 实例中 msg 定义在函数中,则它就是局部变量,外部不能访问:
def test():
msg_inner = 'ok'
# print(msg_inner) #报错,无法访问局部变量

运行结果:

ok

2、作用域二

①、局部变量:定义在函数内部的变量拥有一个局部作用域,局部变量只能在其被声明的函数内部访问。

②、全局变量:定义在函数外的拥有全局作用域, 全局变量可以在整个程序范围内访问。

③、调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

total = 0
def sumcopyt(arg1,arg2):
total= arg1+arg2
print("局部变量",total) # 结果是:3而不是0(以 L –> E –> G –>B 的先后规则查找)
return total
sumcopyt(1,2)
print('全局变量',total)

运行结果:

局部变量 3
全局变量 0

3、作用域三

一个不在局部作用域里的变量默认是只读的,如果试图为其绑定一个新的值,python认为是在当前的局部作用域里创建一个新的变量,也就是说在当前局部作 用域中,如果直接使用外部作用域的变量,那么这个变量是只读的,不能修改。

global:通过里面的操作,改变外面的值

name='50'
def change_name():
name='100'
print('局部变量的值:',name)
change_name()
print('全局变量的值:',name) #全局的变量,并没有修改
print('--------------------------')
name2='50'
def change_name2():
#想让局部的total和全局的total变为同一个total(通过里面的操作,改变外面的值)
global name2
name2='100'
print('局部变量的值:',name2)
change_name2()
print('全局变量的值:',name2) #全局的变量,已经修改啦

运行结果:

局部变量的值:100
全局变量的值:50
--------------------------
局部变量的值:100
全局变量的值:100

4、作用域四

如果要修改嵌套作用域即闭包函数(enclosing 作用域,外层非全局作用域)中的变量则需要nonlocal 关键字

def method_01():
a = 1
def method_02():
nonlocal a
a=2
print(a)
method_02()
print(a) method_01()

运行结果:

2
2

三:Python内置函数

为了提高程序员的开发效率,Python 提供了很多可以直接拿来用的函数。

    内容参考:http://www.runoob.com/python3/python3-built-in-functions.html

 

python语言基础3的更多相关文章

  1. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  2. ArcPy开发教程1-面向ArcGIS的Python语言基础

    ArcPy开发教程1-面向ArcGIS的Python语言基础 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 第一节课 时间2019年2月26日 上午第一节 讲解:A ...

  3. 2.3 Python语言基础

    2.3 Python语言基础 1 语言语义(Language Semantics) 缩进,而不是括号 Python使用空格(tabs or spaces)来组织代码结构,而不是像R,C++,Java那 ...

  4. Python语言基础与应用 (P16)上机练习:基本数据类型

    本文是笔者在学习MOOC课程<Python语言基础与应用> (北京大学-陈斌)中根据上机课时的要求写下在代码 课程总链接: 中国大学MOOC B站 本节课链接 数值基本运算: 33和7+, ...

  5. Python 语言基础

    Python 语言基础 Python 开发环境 计算机组成 编程语言(计算机语言)是人们为了控制计算机,而设计的一种符号和文字的组合,从而实现向计算机发出指令. 形式是符号和文字的组合 目的是为了控制 ...

  6. Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别

    Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...

  7. [Python学习笔记1]Python语言基础 数学运算符 字符串 列表

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...

  8. python(一):python语言基础

    一.python语言基本的8个要素 Python语言的8个要素:数据类型.对象引用.组合数据类型.逻辑操作符.运算操作符.控制流语句.输入/输出.函数的创建与引用.除此之外还有一个非常重要且无处不在的 ...

  9. 【Python笔记】Python语言基础

    Python是一种解释性(没有编译).交互式.面向对象的语言 1.安装python编译器 版本:Python2.7比较普遍,Python不是向下兼容的软件,因此Python3.x有些东西不好找资料 2 ...

  10. Python实验报告——第2章 Python语言基础

    实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...

随机推荐

  1. CNN目标检测系列算法发展脉络——学习笔记(一):AlexNet

    在咨询了老师的建议后,最近开始着手深入的学习一下目标检测算法,结合这两天所查到的资料和个人的理解,准备大致将CNN目标检测的发展脉络理一理(暂时只讲CNN系列部分,YOLO和SSD,后面会抽空整理). ...

  2. vue自带的实例属性和方法($打头)

    Vue 实例内置了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来.例如: var data = { a: 1 } var vm = new Vue({ el: '#examp ...

  3. Java 添加超链接到Excel文档

    超链接即内容链接,通过给特定对象设置超链接,可实现载体与特定网页.文件.邮件.网络等的链接,点击链接载体可打开链接目标,在文档处理中是一种比较常用的功能.本文将介绍通过Java程序给Excel文档添加 ...

  4. centos7.x中安装SQL Server

    本文内容是采集的好几位博主的博文进行的一个整合,内容更为精准和详尽,以下是我参照的几篇博文地址: 微软官方文档:https://docs.microsoft.com/zh-cn/sql/linux/s ...

  5. ts中类的方法和抽象类

    // 类里面的修饰符 typescript提供三种修饰符 /* public: 公有 在类里面.类外面.子类都可以访问 (默认不加就是public) protected: 保护 在类里面和子类可以访问 ...

  6. centos7添加网卡

    centos7添加桥接网卡 1.使用ip a 命令查看是否有新加的网卡 如上图新网卡为ens36,默认分配ip为192.168.3.14 2. 使用nmcli conn 命令查看新网卡的uuid 3. ...

  7. Html介绍,认识html标签

    什么是网页?网页就是我们我们提前写好的代码样式经过浏览器的渲染展示出来的样式效果.其实我们常说的上网就是浏览各式各样的网页,这些网页都是由html标签组成,下面就是一个简单的网页,效果图如下: 简单看 ...

  8. jQuery---钢琴案例 (按下1-9数字键,能触发对应的mouseenter事件)

    钢琴案例 (按下1-9数字键,能触发对应的mouseenter事件) 1. 结合之前的学习,主要内容,就是on注册keyup事件,函数里传入e, 用e.keyCode,来获取1-9的数字的范围. 如果 ...

  9. Angular修改Port文件一览

    \protractor.conf.js\README.md\node_modules\angular-cli\README.md\node_modules\angular-cli\blueprints ...

  10. Spring Boot源码(五):BeanFactoryPostProcessor和BeanPostProcessor

    BeanFactoryPostProcessor是spring BeanFactory加载Bean后调用, BeanPostProcessor是Bean初始化前后调用. BeanFactoryPost ...