python day10 函数(第二篇)
一、内容回顾
1.面试题相关:
1.py2和py3的区别
2.运算符的计算 :3 or 9 and 8
3.字符串的反转
4.is和==的区别
5.v1 = (1) v2 = 1 v3 = (1,)有什么区别
v1 、v2都是数字,v3是元组
6.线上操作系统:centos
7.每种数据类型,列举你了解的方法
8.深浅拷贝
9.文件操作,大文件如何读取内容(如50G的日志文件)
v=open(……)
for line in v:
print(line)
v.close()
10.一行写出:9*9乘法表
git流程
2.函数
方法(数据类型的)类似于函数,但不是函数 。
严格按照顺序传参数:位置方式传参
实际参数可以是任意类型
return没有返回值时,默认返回None
return的作用:1.返回值 2.终止函数的执行
函数内部执行过程中,遇到return就终止
return可以返回任意类型
特殊情况:return 1,2,'alex' 表示返回的是元组,与return(1,2,'alex')相同
二、今日内容
1. 参数
1.1基本参数知识
参数可以是任意个数
可以是任意类型
def func(a1,a2,a3,a4):
print(a1,a2,a3,a4) func(2,'name',[1,2,3],False)
1.2 位置传参(调用函数并传入参数)(执行)
调用/执行函数的时候严格按照位置的顺序传入参数
def func(a1,a2,a3):
print(a1,a2,a3)
func(66,'alex',3)
1.3 关键字传参(执行)
关键字传参就是将形参放入到实参中去使用
def func(a1,a2):
print(a1,a2)
func(a1=22,a2=8)
关键字传参与位置传参是可以混合使用的:位置传入的参数要放在前面,关键字传参要放在后面,最后等于总参数个数
def func(a1,a2,a3):
print(a1,a2,a3)
func(1,2,a3=3)
func(1,a2=2,a3=3)
func(a1=1,a2=2,a3=3)
func(a1=1,2,3) # 是错误的
def func() : 自定义函数 open() 这两个为python的内置函数
pass len()
1.4 默认参数
def func(a1,a2,a3=9,a4=10): # 默认参数a3=9,a4=10
print(a1,a2,a3,a4)
func(11,22) # 不给a3,a4传值,则a3,a4等于默认参数
func(11,22,10)
func(11,22,10,100)
func(11,22,10,a4=100)
func(11,22,a3=10,a4=100)
func(11,a2=22,a3=10,a4=100)
func(a1=11,a2=22,a3=10,a4=100)
1.5 万能参数(用于打散)
*args
可以接受任意个数的位置参数,并将参数转换成元组。
- 调用函数无*
def func(*args):
print(*args) func(1,2) ==> (1,2)
func(1,2,[12,3,4]) ==> (1,2,[12,3,4])
func((11,22,33)) ==> ((11,22,33)) # 参数是一个元组,打印出来的效果是元组套元组。
调用函数有*
def func(*args):
print(*args) func(*(11,22,33)) ==>(11,22,33) # *是用来打散元组的,将元组中的每个元素作为参数。
func(*[11,22,33]) ==>(11,22,33) # *可以用来打散列表/元组 /字典/集合,只是循环内部元素
只能用位置传参
def func(*args):
print(args) func(1)
func(1,2) # args=(1, 2)
func((11,22,33,44,55)) # args=((11,22,33,44,55),)
func(*(11,22,33,44,55)) # args=(11,22,33,44,55)
**kwargs
可以接受任意个数的关键字参数,并见参数转换成字典
调用函数无*
def func(**kwargs):
print(***kwargs) func(k=1) **kwargs = {'k':1}
func(k1=1,k2=3) **kwargs = {'k1':1,'k2':3}
调用函数有*
def func(**kwargs):
print(**kwargs) func(**{'k1':1,'k2':4,'k3':9}) **kwargs = {'k1':1,'k2':4,'k3':9}
只能用关键字传参
*args/**kwargs综合使用:无敌 + 无敌 => 真无敌
def func(*args,**kwargs):
print(args,kwargs) func(1,2,3,4,5,k1=2,k5=9,k19=999) *arg = (1,2,3,4,5) **kwargs = {'k1':2,'k5':9,'k19':999}
func(*[1,2,3],k1=2,k5=9,k19=999) *arg = (1,2,3) **kwargs = {'k1':2,'k5':9,'k19':999}
func(*[1,2,3],**{'k1':1,'k2':3}) *arg = (1,2,3) **kwargs = {'k1':1,'k2':3}
func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})
*arg = (111,222,1,2,3) **kwargs = {'k11':'alex','k1':1,'k2':3}
1.6 参数相关的重点
定义函数
def func(a1,a2):
pass def func(a1,a2=None): # 对于默认值,不可变类型随便写,如果是可变类型(有坑)。
pass def func(*args,**kwargs):
pass
调用函数
位置参数在前,关键字参数在后。
2. 作用域
在python文件中:
py文件:全局作用域
函数:局部作用域
a = 1
def s1():
x1 = 666
print(x1)
print(a)
print(b) b = 2
print(a)
s1()
a = 88888
def s2():
print(a,b)
s1() s2()
每个作用域中的数据只有作用域自己可以调用,如果作用域中调用的数据没有,可以调用全局作用域的
全局作用域只能调用全局的
在全局作用域中的函数可以互相调用(调用已经存在的),但不可以直接调用作用域中的作用域
总结:
1.一个函数就是一个作用域
2.作用域中查找数据规则:优先在自己的作用域找数据,自己没有就去“父级”-->“父级”-->直到全局,全局没有就报错。 (作用域的嵌套)
注意:父级作用域中的值到底是多少?
x = 10
def func():
x = 9
print(x) func()
课上练习题
x = 10
def func():
x = 9
print(x)
def x1():
x = 999
print(x) func() x = 10
def func():
x = 9
print(x)
def x1():
x = 999
print(x)
x1() func() x = 10
def func():
x = 9
print(x)
def x1():
x = 999
print(x)
print(x)
x1() func() x = 10
def func():
x = 8
print(x)
def x1():
x = 999
print(x)
x1()
print(x) func() x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x1()
print(x) func() x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x = 9
x1()
x = 10
print(x) func() x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x1()
x = 9
x1()
x = 10
print(x) func()
3.子作用域中只能只能找到父级中的值,默认无法重新为父级的变量进行赋值。
不能进行赋值,只能对可变类型进行内部修改
# #####################
name = 'oldboy'
def func():
name = 'alex' # 在自己作用域再创建一个这样的值。
print(name)
func()
print(name) # #####################
name = [1,2,43]
def func():
name.append(999)
print(name)
func()
print(name)
如果非要对全局的变量进行赋值需要加global(强制赋值)
#示例一
name = "老男孩“
def func():
global name
name = 'alex'
func()
print name # 示例二
name = ["老男孩",'alex']
def func():
global name
name = '我'
func()
print(name) # 示例三
name = "老男孩"
def func():
name = 'alex'
def inner():
global name
name = 999
inner()
print(name)
func()
print(name)对父级的变量赋值用nonlocal,先找到父级的变量再进行赋值 (强制赋值)
name = "老男孩"
def func():
name = 'alex'
def inner():
nonlocal name # 找到上一级的name
name = 999
inner()
print(name)
func()
print(name)
补充:全局变量必须全部要大写
USER_LIST = [11,22,3]
def func():
name = 'asdf'
USER_LIST.append(12)
USER_LIST.append(name)
func()
print(USER_LIST)
python day10 函数(第二篇)的更多相关文章
- python之函数第二篇
一.名称空间与作用域 名称空间分类: 内置名称空间 import this dir(buil-in) 查看全部内置 全局名称空间 局部名称空间 在函数体内等 查询全局和局部 globals()方法可以 ...
- Python开发【第二篇】:初识Python
Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- Python笔记_第二篇_面向过程_第二部分_1.函数
函数:这个词属于一个数学概念,在编程语言借鉴了这个概念,表现形式是一段程序代码的组合,也叫“程序集”.有过编程基础的人很容易理解这个概念,当我们编写程序越来越多的时候,程序设计大师们会把散乱的程序进行 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- Python基础【第二篇】
一.Python的标准数据类型 Python 3中主要有以下6中数据类型: Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary( ...
- Python之路(第二篇):Python基本数据类型字符串(一)
一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...
- python学习【第二篇】初识python
python的安装 windows 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机] ...
随机推荐
- pycrypto安装出错的问题 intmax_t C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.
前言: 需要安装 Microsoft Visual Studio2017 Community 或者buildtools 解决方案一(解决了python3.7上安装pycrypto-2.6.1的错误问题 ...
- C++标准模板类库(STL)之queue初步
1,STL里有些什么? 包括三个内容:容器.迭代器.算法. 2,容器有哪些? 有stack, vector, queue, deque, list, set, multiset, map, multi ...
- 工控随笔_15_西门子_WinCC的VBS脚本_05_变量类型之三_VBS数组
数组是一种复杂数据类型,不但有数组本身的数据类型: 数组,还有数组元素中存储的数据的类型. 一.vbs中的数组类型 在VBS中提供了两种数组类型,一种是固定数组,一种是动态数组. 1.固定数组 就是在 ...
- list 转成 tree
package com.zl; import java.util.ArrayList; import java.util.List; public class MenuItem { private S ...
- Chromium(Chrome) frame structure detail
1. Chromium VS Chrome Chromium is an open-source Web browser project started by Google, to provide t ...
- 生成3位的序列号_仅仅CASE WHEN的简单应用
PNo, , ) AS sn INTO #temp1 FROM tbl_test SELECT ), sn) ), sn) ), sn) END AS sn, PNo FROM #temp1
- 决策树之ID3,C4.5及CART
决策树的基本认识 决策树学习是应用最广的归纳推理算法之一,是一种逼近离散值函数的方法,年,香农引入了信息熵,将其定义为离散随机事件出现的概率,一个系统越是有序,信息熵就越低,反之一个系统越是混乱,它 ...
- 关于vim的常用操作
vim常用操作和使用技巧 vi是linux与unix下的常用文本编辑器,其运行稳定,使用方便,本文将分两部分对其常用操作技巧和配置进行阐述,其中参考了网上的一些文章,对作者表示感谢 PART1 操作技 ...
- Day74
Django框架之视图函数(day74)一 作业相关 urlpatterns = [ url(r'^$',views.book), #根路径,响应到指定视图函数: ..... url(r ...
- WPF xml配置文件里面的大于小于号转义
转义字符:<![CDATA[]]>,将要转义的字符放到中括号中,比如要转小于号:<,则换为<![CDATA[<]]> <?xml version=" ...