程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java法式中添加播放MIDI音樂功效的完成辦法詳解

Java法式中添加播放MIDI音樂功效的完成辦法詳解

編輯:關於JAVA

Java法式中添加播放MIDI音樂功效的完成辦法詳解。本站提示廣大學習愛好者:(Java法式中添加播放MIDI音樂功效的完成辦法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java法式中添加播放MIDI音樂功效的完成辦法詳解正文


Python是一門簡略而文字繁復的說話。浏覽好的Python法式感到就像浏覽英語,雖然長短常嚴厲的英語。Python的這類偽代碼特征是其最年夜強項之一,它可以讓你專注於處理成績的方法而不是說話自己。

在應用Python多年今後,我有時發明了一些我們曩昔不曉得的功效和特征。一些可以說長短常有效,但卻沒有充足應用。斟酌到這一點,我編纂了一些的你應當懂得的Pyghon功效特點。

 帶隨意率性數目參數的函數

  你能夠曾經曉得了Python許可你界說可選參數。但還有一個辦法,可以界說函數隨意率性數目的參數。

  起首,看上面是一個只界說可選參數的例子

def function(arg1="",arg2=""): 
  print "arg1: {0}".format(arg1) 
  print "arg2: {0}".format(arg2) 
function("Hello", "World") 
# prints args1: Hello 
# prints args2: World 
function() 
# prints args1: 
# prints args2: 

  如今,讓我們看看怎樣界說一個可以接收隨意率性參數的函數。我們應用元組來完成。

def foo(*args): # just use "*" to collect all remaining arguments into a tuple 
  numargs = len(args) 
  print "Number of arguments: {0}".format(numargs) 
  for i, x in enumerate(args): 
    print "Argument {0} is: {1}".format(i,x) 
foo() 
# Number of arguments: 0 
foo("hello") 
# Number of arguments: 1 
# Argument 0 is: hello 
foo("hello","World","Again") 
# Number of arguments: 3 
# Argument 0 is: hello 
# Argument 1 is: World 
# Argument 2 is: Again 

 應用Glob()查找文件

  年夜多Python函數有著長且具有描寫性的名字。然則定名為glob()的函數你能夠不曉得它是干甚麼的除非你從別處曾經熟習它了。

  它像是一個更壯大版本的listdir()函數。它可讓你經由過程應用形式婚配來搜刮文件。

import glob 
# get all py files 
files = glob.glob('*.py') 
print files 
# Output 
# ['arg.py', 'g.py', 'shut.py', 'test.py'] 

  你可以像上面如許查找多個文件類型:

import itertools as it, glob 
def multiple_file_types(*patterns): 
  return it.chain.from_iterable(glob.glob(pattern) for pattern in patterns) 
for filename in multiple_file_types("*.txt", "*.py"): # add as many filetype arguements 
  print filename 
# output 
#=========# 
# test.txt 
# arg.py 
# g.py 
# shut.py 
# test.py 

  假如你想獲得每一個文件的相對途徑,你可以在前往值上挪用realpath()函數:

 import itertools as it, glob, os 
def multiple_file_types(*patterns): 
  return it.chain.from_iterable(glob.glob(pattern) for pattern in patterns) 
for filename in multiple_file_types("*.txt", "*.py"): # add as many filetype arguements 
  realpath = os.path.realpath(filename) 
  print realpath 
# output 
#=========# 
# C:\xxx\pyfunc\test.txt 
# C:\xxx\pyfunc\arg.py 
# C:\xxx\pyfunc\g.py 
# C:\xxx\pyfunc\shut.py 
# C:\xxx\pyfunc\test.py 

 調試

  上面的例子應用inspect模塊。該模塊用於調試目標時長短常有效的,它的功效遠比這裡描寫的要多。

  這篇文章不會籠罩這個模塊的每一個細節,但會展現給你一些用例。

import logging, inspect 
logging.basicConfig(level=logging.INFO, 
  format='%(asctime)s %(levelname)-8s %(filename)s:%(lineno)-4d: %(message)s', 
  datefmt='%m-%d %H:%M', 
  ) 
logging.debug('A debug message') 
logging.info('Some information') 
logging.warning('A shot across the bow') 
def test(): 
  frame,filename,line_number,function_name,lines,index=\ 
    inspect.getouterframes(inspect.currentframe())[1] 
  print(frame,filename,line_number,function_name,lines,index) 
test() 
# Should print the following (with current date/time of course) 
#10-19 19:57 INFO   test.py:9  : Some information 
#10-19 19:57 WARNING test.py:10 : A shot across the bow 
#(, 'C:/xxx/pyfunc/magic.py', 16, '', ['test()\n'], 0)

 生成獨一ID

  在有些情形下你須要生成一個獨一的字符串。我看到許多人應用md5()函數來到達此目標,但它確切不是以此為目標。

  其實有一個名為uuid()的Python函數是用於這個目標的。

import uuid 
result = uuid.uuid1() 
print result 
# output => various attempts 
# 9e177ec0-65b6-11e3-b2d0-e4d53dfcf61b 
# be57b880-65b6-11e3-a04d-e4d53dfcf61b 
# c3b2b90f-65b6-11e3-8c86-e4d53dfcf61b 

   你能夠會留意到,即便字符串是獨一的,但它們後邊的幾個字符看起來很類似。這是由於生成的字符串與電腦的MAC地址是相接洽的。

  為了削減反復的情形,你可使用這兩個函數。

import hmac,hashlib 
key='1'
data='a'
print hmac.new(key, data, hashlib.sha256).hexdigest() 
m = hashlib.sha1() 
m.update("The quick brown fox jumps over the lazy dog") 
print m.hexdigest() 
# c6e693d0b35805080632bc2469e1154a8d1072a86557778c27a01329630f8917 
# 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 

 序列化

  你已經須要將一個龐雜的變量存儲在數據庫或文本文件中吧?你不須要想一個獨特的辦法將數組或對象格轉化為式化字符串,由於Python曾經供給了此功效。

import pickle 
variable = ['hello', 42, [1,'two'],'apple'] 
# serialize content 
file = open('serial.txt','w') 
serialized_obj = pickle.dumps(variable) 
file.write(serialized_obj) 
file.close() 
# unserialize to produce original content 
target = open('serial.txt','r') 
myObj = pickle.load(target) 
print serialized_obj 
print myObj 
#output 
# (lp0 
# S'hello' 
# p1 
# aI42 
# a(lp2 
# I1 
# aS'two' 
# p3 
# aaS'apple' 
# p4 
# a. 
# ['hello', 42, [1, 'two'], 'apple'] 

  這是一個原生的Python序列化辦法。但是近幾年來JSON變得風行起來,Python添加了對它的支撐。如今你可使用JSON來編解碼。

import json 
variable = ['hello', 42, [1,'two'],'apple'] 
print "Original {0} - {1}".format(variable,type(variable)) 
# encoding 
encode = json.dumps(variable) 
print "Encoded {0} - {1}".format(encode,type(encode)) 
#deccoding 
decoded = json.loads(encode) 
print "Decoded {0} - {1}".format(decoded,type(decoded)) 
# output 
# Original ['hello', 42, [1, 'two'], 'apple'] - <type 'list'=""> 
# Encoded ["hello", 42, [1, "two"], "apple"] - <type 'str'=""> 
# Decoded [u'hello', 42, [1, u'two'], u'apple'] - <type 'list'=""> 

  如許更緊湊,並且最主要的是如許與JavaScript和很多其他說話兼容。但是關於龐雜的對象,個中的一些信息能夠喪失。

 緊縮字符

  當談起緊縮時我們平日想到文件,好比ZIP構造。在Python中可以緊縮長字符,不觸及任何檔案文件。

import zlib 
string = """  Lorem ipsum dolor sit amet, consectetur 
        adipiscing elit. Nunc ut elit id mi ultricies 
        adipiscing. Nulla facilisi. Praesent pulvinar, 
        sapien vel feugiat vestibulum, nulla dui pretium orci, 
        non ultricies elit lacus quis ante. Lorem ipsum dolor 
        sit amet, consectetur adipiscing elit. Aliquam 
        pretium ullamcorper urna quis iaculis. Etiam ac massa 
        sed turpis tempor luctus. Curabitur sed nibh eu elit 
        mollis congue. Praesent ipsum diam, consectetur vitae 
        ornare a, aliquam a nunc. In id magna pellentesque 
        tellus posuere adipiscing. Sed non mi metus, at lacinia 
        augue. Sed magna nisi, ornare in mollis in, mollis 
        sed nunc. Etiam at justo in leo congue mollis. 
        Nullam in neque eget metus hendrerit scelerisque 
        eu non enim. Ut malesuada lacus eu nulla bibendum 
        id euismod urna sodales. """
print "Original Size: {0}".format(len(string)) 
compressed = zlib.compress(string) 
print "Compressed Size: {0}".format(len(compressed)) 
decompressed = zlib.decompress(compressed) 
print "Decompressed Size: {0}".format(len(decompressed)) 
# output 
# Original Size: 1022 
# Compressed Size: 423 
# Decompressed Size: 1022 

 注冊Shutdown函數

 有可模塊叫atexit,它可讓你在劇本運轉完後立馬履行一些代碼。

  假設你想在劇本履行停止時丈量一些基准數據,好比運轉了多長時光:

   打眼看來很簡略。只須要將代碼添加到劇本的最底層,它將在劇本停止前運轉。但假如劇本中有一個致命毛病或許劇本被用戶終止,它能夠就不運轉了。

  當你應用atexit.register()時,你的代碼都將履行,豈論劇本由於甚麼緣由停滯運轉。

 結論

  你能否認識到那些不是廣為人知Python特征很有效?請在評論處與我們分享。感謝你的浏覽!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved