为了账号安全,请及时绑定邮箱和手机立即绑定

初识Python

廖雪峰 移动开发工程师
难度入门
时长 5小时 0分
学习人数
综合评分9.43
3762人评价 查看评价
9.7 内容实用
9.4 简洁易懂
9.2 逻辑清晰
  • gc
    高速流模式 在Powershell脚本的处理中,绝大多数情况下遇到的都是集合,一旦上一条命令产生一个中间结果,下一条命令就对这个中间结果及时处理,及时释放资源。这样可以节省内存,也减少了用户的等待时间。在处理大量数据时,尤其值得推荐。高速流模式的管道定义包括三部分:begin,process,end。上面的描述中提到了中间结果,中间结果保存在$_自动化变量中。 输入脚本文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 begin { Write-Host "管道脚本环境初始化" } process { $ele=$_ if($_.Extension -ne "") { switch($_.Extension.tolower()) { ".ps1" {"脚本文件:"+ $ele.name} ".txt" {"文本文件:"+ $ele.Name} ".gz" {"压缩文件:"+ $ele.Name} } } } end { Write-Host "管道脚本环境恢复" } 执行脚本文件: PS E:> ls | .pipeline.ps1 管道脚本环境初始化 文本文件:a.txt 压缩文件:Metrol.tar.gz 脚本文件:MyScript.ps1 脚本文件:pipeline.ps1 脚本文件:PSLib.ps1 管道脚本环境恢复
    查看全部
  • gc
    我们可以像创建管道函数那样创建管道脚本,具体采用低速顺序模式,还是高速流模式,这取决于具体的编程实现。 低速顺序模式 如果你在脚本中使用管道,脚本收集上一个语句的执行结果,默认保存在$input自动变量中。但是直到上一条语句完全执行彻底,管道脚本才会执行。 创建脚本: pipeline.ps1 1 2 3 4 5 6 7 8 9 10 11 foreach ($element in $input) { if($element.Extension -eq ".exe") { Write-Host -fore "red" $element.Name } else { Write-Host -fore "Green" $element.Name } } 执行脚本: PS E:> ls $env:windir | .pipeline.ps1 如果这样执行: PS E:> ls $env:windir -Recurse | .pipeline.ps1 控制台会被冻结,因为存储的中间结果在玩命的吃内存。这个也是低速顺序模式的缺点。
    查看全部
  • gc
    类库脚本集中存放 在开始使用类库脚本工作之前,最好先制定出一个存储脚本类库的策略。一种方法是和工作脚本存放在一起,可以使用相对路径;另一种方法是分开存放,加载时就得使用绝对路径了。最好在当前用户的私人目录中存放脚本,相对来说比较安全。 例如下面的例子: PS E:> md $env:appdataPSLib 目录: C:UsersbaozhenAppDataRoaming Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/4/30 22:47 PSLib PS E:> copy .PSLib.ps1 $env:APPDATAPSLib
    查看全部
  • gc
    将Factorial函数保存在PSLib.ps1 1 2 3 4 5 6 7 8 9 Function Factorial([int]$n) { $total=1 for($i=1;$i -le $n;$i++) { $total*=$i } return $total } 将脚本修改为: 1 2 3 param([int]$n=$(throw "请输入一个正整数")) . .PSLib.ps1 Factorial $n 执行脚本: 1 2 PS E:> .MyScript.ps1 10 3628800 脚本在执行时,先加载类库中的函数。加载函数类库和执行脚本类似,只需要在前面增加一个句号,中间有空格。
    查看全部
  • gc
    不像其它脚本语言,Powershell中的函数必须先定义后使用。 所以更改脚本为: 1 2 3 4 5 6 7 8 9 10 11 param([int]$n=$(throw "请输入一个正整数")) Function Factorial([int]$n) { $total=1 for($i=1;$i -le $n;$i++) { $total*=$i } return $total } Factorial $n 执行脚本: PS E:> .MyScript.ps1 10 3628800
    查看全部
  • gc
    如果你愿意,你可以把一个脚本写的非常长,问题是脚本的代码量越大,可读性越差。最好的方式在写脚本时融入函数和类库的概念: 函数:把实现一些小功能的代码写成一个函数,不仅可以增强代码的可读性,还可以很方便的重用。一旦你创建了一个实现特定功能的函数,也可以下次在其它脚本中使用。 类库:把需要的函数嵌入进类库中,就不用每次在执行脚本时拷贝函数,并且还可以在需要时扩充它。另外以函数的方式构建类库,还可以让你更专注特定功能的具体实现,降低脚本开发的复杂度。 在脚本中使用函数 要在脚本中使用函数,最简单的方法自然是将函数直接写在脚本中: 在MyScript.ps1中输入: 1 2 3 4 5 6 7 8 9 10 11 param([int]$n=$(throw "请输入一个正整数")) Factorial $n Function Factorial([int]$n) { $total=1 for($i=1;$i -le $n;$i++) { $total*=$i } return $total } 这个脚本接收一个正整数参数,然后通过Factorial函数求阶乘。 PS E:> .MyScript.ps1 请输入一个正整数 所在位置 E:MyScript.ps1:1 字符: 22 + param([int]$n=$(throw < <<< "请输入一个正整数")) + CategoryInfo : OperationStopped: (请输入一个正整数:String) [], RuntimeException + FullyQualifiedErrorId : 请输入一个正整数 PS E:> .MyScript.ps1 100 无法将“Factorial”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路 径,请确保路径正确,然后重试。 所在位置 E:MyScript.ps1:2 字符: 10 + Factorial < <<< $n
    查看全部
  • gc
    变量的作用域 Powershell默认使用全局作用域global: ,但是在函数和脚本中分别使用函数作用域function:和脚本作用域script: 。 一旦脚本执行结束,存在于脚本作用域的变量也会消失。但是有一点,如果一个变量在脚本外定义,在脚本内没有定义,在脚本内使用时会把外面的变量引渡过来。 在脚本中输入: 1 $temp 执行脚本: PS E:> .MyScript.ps1 PS E:> $temp="mosser lee" PS E:> .MyScript.ps1 mosser lee 在脚本中尝试改变变量$temp,但是脚本内的变量不会影响脚本外的变量,输入脚本: 1 2 $temp="www.mossfly.com" $temp 执行脚本: PS E:> .MyScript.ps1 www.mossfly.com PS E:> $temp mosser lee
    查看全部
  • gc
    验证参数 给脚本的参数绑定数据类型,绑定帮助信息。一旦脚本缺少参数,或者输入的参数类型不正确,就提醒用户: 输入脚本: 1 2 3 4 5 6 7 param( [string]$Name=$(throw "Parameter missing: -name Name") , [int]$Age=$(throw "Parameter missing: -age x as number") ) "Name= $Name" "Age=$Age" 执行脚本: PS E:> .MyScript.ps1 Parameter missing: -name Name 所在位置 E:MyScript.ps1:2 字符: 22 + [string]$Name=$(throw < <<< "Parameter missing: -name Name") , + CategoryInfo : OperationStopped: (Parameter missing: -name Name:String) [], Runtime Exception + FullyQualifiedErrorId : Parameter missing: -name Name PS E:> .MyScript.ps1 -Name mosser Parameter missing: -age x as number 所在位置 E:MyScript.ps1:3 字符: 18 + [int]$Age=$(throw < <<< "Parameter missing: -age x as number") + CategoryInfo : OperationStopped: (Parameter missing: -age x as number:String) [], R untimeException + FullyQualifiedErrorId : Parameter missing: -age x as number PS E:> .MyScript.ps1 -Name mosser -Age abc E:MyScript.ps1 : 无法处理对参数“
    查看全部
  • gc
    在脚本中使用参数名 通过Powershell传递参数固然方便,但是如果用户不知道参数的传递顺序,也是很郁闷的,例如在Myscript.ps1中输入: $args[0]-$args[1] 执行脚本发现参数的顺序不同,结果也不同: PS E:> Get-Content .MyScript.ps1 $args[0]-$args[1] PS E:> .MyScript.ps1 10 8 2 PS E:> .MyScript.ps1 8 10 -2 所以最好的方式给参数指定名称,输入以下的脚本: 1 2 3 4 param($Directory,$FileName) "Directory= $Directory" "FileName=$FileName" 其中param给参数指定名称。 执行脚本: PS E:> .MyScript.ps1 -Directory $env:windir -FileName config.xml Directory= C:windows FileName=config.xml PS E:> .MyScript.ps1 -FileName config.xml -Directory $env:windir Directory= C:windows FileName=config.xml
    查看全部
  • gc
    $args数组参数 默认情况下,传递给一个Powershell脚本的参数类型为数组,例如: PS E:> .MyScript.ps1 My Website Is www.mossfly.com Hello,My Website Is www.mossfly.com 上面的文本中包含多个连续的空格,可是当脚本把参数输出时却不存在连续的空格了。那是因为脚本会把文本根据白空格截断并转换成数组。如果不想文本被当成数组那就把它放在引号中。 PS E:> .MyScript.ps1 "My Website Is www.mossfly.com" Hello,My Website Is www.mossfly.com 在$args中逐个访问参数 因为$args是一个数组,自然可以通过索引访问数组的每一个元素。可以将MyScript.sp1的内容改为: 1 2 3 4 For($i=0;$i -lt $args.Count; $i++) { Write-Host "parameter $i : $($args[$i])" } 然后在控制台测试: PS E:> .MyScript.ps1 www moss fly com parameter 0 : www parameter 1 : moss parameter 2 : fly parameter 3 : com
    查看全部
  • gc
    怎样将一个脚本稍作润色,让它能够根据用户的输入,处理并输出相应的结果,而不是只产生一成不变的输出。怎样将参数传递给脚本,这是本篇讨论的内容。 $args返回所有的参数 传递给一个函数或者一个脚本的参数都保存在$args变量中。可以先打开记事本,输入脚本: 1 Write-Host "Hello,$args" 保存后,通过控制台执行脚本: PS E:> notepad myscript.ps1 PS E:> .MyScript.ps1 Hello, PS E:> .MyScript.ps1 "Mosser Lee" Hello,Mosser Lee
    查看全部
  • gc
    查看所有支持的执行策略: PS E:> [System.Enum]::GetNames([Microsoft.PowerShell.ExecutionPolicy]) Unrestricted RemoteSigned AllSigned Restricted Default Bypass Undefined Unrestricted:权限最高,可以不受限制执行任何脚本。 Default:为Powershell默认的策略:Restricted,不允许任何脚本执行。 AllSigned:所有脚本都必须经过签名才能在运行。 RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。 关于Powershell脚本的签名在后续会谈到。 像命令一样执行脚本 怎样像执行一个命令一样执行一个脚本,不用输入脚本的相对路径或者绝对路径,甚至*.ps1扩展名。 那就将脚本的执行语句保存为别名吧: PS E:> Set-Alias Invok-MyScript .MyScript.ps1 PS E:> Invok-MyScript 2012年4月28日 0:24:22 C:\Program Files\Common Files files count 20
    查看全部
  • gc
    执行策略限制 Powershell一般初始化情况下都会禁止脚本执行。脚本能否执行取决于Powershell的执行策略。 PS E:> .\MyScript.ps1 无法加载文件 E:MyScript.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_sign ing"。 所在位置 行:1 字符: 15 + .MyScript.ps1 < <<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException 只有管理员才有权限更改这个策略。非管理员会报错。 查看脚本执行策略,可以通过: PS E:> Get-ExecutionPolicy 更改脚本执行策略,可以通过 PS E:> Get-ExecutionPolicy Restricted PS E:> Set-ExecutionPolicy UnRestricted 执行策略更改 执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_Execution_Policies 帮助主题中所述的安全风险。是否要更改执行策略? [Y] 是(Y) [N] 否(N) [S] 挂起(S) [?] 帮助 (默认值为“Y”): y 脚本执行策略类型为:Microsoft.PowerShell.ExecutionPolicy
    查看全部
  • gc
    运行Powershell脚本 当您的脚本编写成功后您可能第一次会像下面的方式运行它,也就是只输入脚本的文件名,会报错。 PS E:> MyScript.ps1 无法将“MyScript.ps1”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括 路径,请确保路径正确,然后重试。 所在位置 行:1 字符: 13 + MyScript.ps1 < <<< + CategoryInfo : ObjectNotFound: (MyScript.ps1:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException Suggestion [3,General]: 未找到命令 MyScript.ps1,但它确实存在于当前位置。Windows PowerShell 默认情况 下不从当前位置加载命令。如果信任此命令,请改为键入 ".MyScript.ps1"。有关更多详细信息,请参阅 "get-h elp about_Command_Precedence"。 除非您使用相对路径,或者绝对路径 PS E:> .\MyScript.ps1 2012年4月27日 8:33:03 C:\Program Files\Common Files files count 20 PS E:> E:MyScript.ps1 2012年4月27日 8:33:11 C:\Program Files\Common Files files count 20
    查看全部
  • gc
    书写方式一旦在脚本内部也有引号时,是一件很痛苦的事。甚至您还可能希望在脚本中换行。下面的Here-strings例子不错,也就是将脚本文件通过@‘ ’@闭合起来。 PS E:> @' >> Get-Date >> $Env:CommonProgramFiles >> #Script End >> "files count" >> (ls).Count >> #Script Really End >> >> '@ > myscript.ps1 >> PS E:> .MyScript.ps1 2012年4月27日 8:15:10 C:\Program Files\Common Files files count 20 Here-String以 @‘开头,以’@结束.任何文本都可以存放在里面,哪怕是一些特殊字符,空号,白空格。但是如果您不小心将单引号写成了双引号,Powershell将会把里面的变量进行解析。
    查看全部

举报

0/150
提交
取消
课程须知
如果您了解程序设计的基本概念,会简单使用命令行,了解中学数学函数的概念,那么对课程学习会有很大的帮助,让您学起来得心应手,快速进入Python世界。
老师告诉你能学到什么?
通过本课程的学习,您将学会搭建基本的Python开发环境,以函数为基础编写完整的Python代码,熟练掌握Python的基本数据类型以及list和dict的操作。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!